{
  "id": "1576e6d9bc3dbb6065c674fc6e9d24fd",
  "_format": "hh-sol-build-info-1",
  "solcVersion": "0.8.27",
  "solcLongVersion": "0.8.27+commit.40a35a09",
  "input": {
    "language": "Solidity",
    "sources": {
      "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (access/AccessControl.sol)\n\npragma solidity ^0.8.20;\n\nimport {IAccessControl} from \"@openzeppelin/contracts/access/IAccessControl.sol\";\nimport {ContextUpgradeable} from \"../utils/ContextUpgradeable.sol\";\nimport {IERC165} from \"@openzeppelin/contracts/utils/introspection/IERC165.sol\";\nimport {ERC165Upgradeable} from \"../utils/introspection/ERC165Upgradeable.sol\";\nimport {Initializable} from \"../proxy/utils/Initializable.sol\";\n\n/**\n * @dev Contract module that allows children to implement role-based access\n * control mechanisms. This is a lightweight version that doesn't allow enumerating role\n * members except through off-chain means by accessing the contract event logs. Some\n * applications may benefit from on-chain enumerability, for those cases see\n * {AccessControlEnumerable}.\n *\n * Roles are referred to by their `bytes32` identifier. These should be exposed\n * in the external API and be unique. The best way to achieve this is by\n * using `public constant` hash digests:\n *\n * ```solidity\n * bytes32 public constant MY_ROLE = keccak256(\"MY_ROLE\");\n * ```\n *\n * Roles can be used to represent a set of permissions. To restrict access to a\n * function call, use {hasRole}:\n *\n * ```solidity\n * function foo() public {\n *     require(hasRole(MY_ROLE, msg.sender));\n *     ...\n * }\n * ```\n *\n * Roles can be granted and revoked dynamically via the {grantRole} and\n * {revokeRole} functions. Each role has an associated admin role, and only\n * accounts that have a role's admin role can call {grantRole} and {revokeRole}.\n *\n * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means\n * that only accounts with this role will be able to grant or revoke other\n * roles. More complex role relationships can be created by using\n * {_setRoleAdmin}.\n *\n * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to\n * grant and revoke this role. Extra precautions should be taken to secure\n * accounts that have been granted it. We recommend using {AccessControlDefaultAdminRules}\n * to enforce additional security measures for this role.\n */\nabstract contract AccessControlUpgradeable is Initializable, ContextUpgradeable, IAccessControl, ERC165Upgradeable {\n    struct RoleData {\n        mapping(address account => bool) hasRole;\n        bytes32 adminRole;\n    }\n\n    bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;\n\n\n    /// @custom:storage-location erc7201:openzeppelin.storage.AccessControl\n    struct AccessControlStorage {\n        mapping(bytes32 role => RoleData) _roles;\n    }\n\n    // keccak256(abi.encode(uint256(keccak256(\"openzeppelin.storage.AccessControl\")) - 1)) & ~bytes32(uint256(0xff))\n    bytes32 private constant AccessControlStorageLocation = 0x02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800;\n\n    function _getAccessControlStorage() private pure returns (AccessControlStorage storage $) {\n        assembly {\n            $.slot := AccessControlStorageLocation\n        }\n    }\n\n    /**\n     * @dev Modifier that checks that an account has a specific role. Reverts\n     * with an {AccessControlUnauthorizedAccount} error including the required role.\n     */\n    modifier onlyRole(bytes32 role) {\n        _checkRole(role);\n        _;\n    }\n\n    function __AccessControl_init() internal onlyInitializing {\n    }\n\n    function __AccessControl_init_unchained() internal onlyInitializing {\n    }\n    /// @inheritdoc IERC165\n    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n        return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId);\n    }\n\n    /**\n     * @dev Returns `true` if `account` has been granted `role`.\n     */\n    function hasRole(bytes32 role, address account) public view virtual returns (bool) {\n        AccessControlStorage storage $ = _getAccessControlStorage();\n        return $._roles[role].hasRole[account];\n    }\n\n    /**\n     * @dev Reverts with an {AccessControlUnauthorizedAccount} error if `_msgSender()`\n     * is missing `role`. Overriding this function changes the behavior of the {onlyRole} modifier.\n     */\n    function _checkRole(bytes32 role) internal view virtual {\n        _checkRole(role, _msgSender());\n    }\n\n    /**\n     * @dev Reverts with an {AccessControlUnauthorizedAccount} error if `account`\n     * is missing `role`.\n     */\n    function _checkRole(bytes32 role, address account) internal view virtual {\n        if (!hasRole(role, account)) {\n            revert AccessControlUnauthorizedAccount(account, role);\n        }\n    }\n\n    /**\n     * @dev Returns the admin role that controls `role`. See {grantRole} and\n     * {revokeRole}.\n     *\n     * To change a role's admin, use {_setRoleAdmin}.\n     */\n    function getRoleAdmin(bytes32 role) public view virtual returns (bytes32) {\n        AccessControlStorage storage $ = _getAccessControlStorage();\n        return $._roles[role].adminRole;\n    }\n\n    /**\n     * @dev Grants `role` to `account`.\n     *\n     * If `account` had not been already granted `role`, emits a {RoleGranted}\n     * event.\n     *\n     * Requirements:\n     *\n     * - the caller must have ``role``'s admin role.\n     *\n     * May emit a {RoleGranted} event.\n     */\n    function grantRole(bytes32 role, address account) public virtual onlyRole(getRoleAdmin(role)) {\n        _grantRole(role, account);\n    }\n\n    /**\n     * @dev Revokes `role` from `account`.\n     *\n     * If `account` had been granted `role`, emits a {RoleRevoked} event.\n     *\n     * Requirements:\n     *\n     * - the caller must have ``role``'s admin role.\n     *\n     * May emit a {RoleRevoked} event.\n     */\n    function revokeRole(bytes32 role, address account) public virtual onlyRole(getRoleAdmin(role)) {\n        _revokeRole(role, account);\n    }\n\n    /**\n     * @dev Revokes `role` from the calling account.\n     *\n     * Roles are often managed via {grantRole} and {revokeRole}: this function's\n     * purpose is to provide a mechanism for accounts to lose their privileges\n     * if they are compromised (such as when a trusted device is misplaced).\n     *\n     * If the calling account had been revoked `role`, emits a {RoleRevoked}\n     * event.\n     *\n     * Requirements:\n     *\n     * - the caller must be `callerConfirmation`.\n     *\n     * May emit a {RoleRevoked} event.\n     */\n    function renounceRole(bytes32 role, address callerConfirmation) public virtual {\n        if (callerConfirmation != _msgSender()) {\n            revert AccessControlBadConfirmation();\n        }\n\n        _revokeRole(role, callerConfirmation);\n    }\n\n    /**\n     * @dev Sets `adminRole` as ``role``'s admin role.\n     *\n     * Emits a {RoleAdminChanged} event.\n     */\n    function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {\n        AccessControlStorage storage $ = _getAccessControlStorage();\n        bytes32 previousAdminRole = getRoleAdmin(role);\n        $._roles[role].adminRole = adminRole;\n        emit RoleAdminChanged(role, previousAdminRole, adminRole);\n    }\n\n    /**\n     * @dev Attempts to grant `role` to `account` and returns a boolean indicating if `role` was granted.\n     *\n     * Internal function without access restriction.\n     *\n     * May emit a {RoleGranted} event.\n     */\n    function _grantRole(bytes32 role, address account) internal virtual returns (bool) {\n        AccessControlStorage storage $ = _getAccessControlStorage();\n        if (!hasRole(role, account)) {\n            $._roles[role].hasRole[account] = true;\n            emit RoleGranted(role, account, _msgSender());\n            return true;\n        } else {\n            return false;\n        }\n    }\n\n    /**\n     * @dev Attempts to revoke `role` from `account` and returns a boolean indicating if `role` was revoked.\n     *\n     * Internal function without access restriction.\n     *\n     * May emit a {RoleRevoked} event.\n     */\n    function _revokeRole(bytes32 role, address account) internal virtual returns (bool) {\n        AccessControlStorage storage $ = _getAccessControlStorage();\n        if (hasRole(role, account)) {\n            $._roles[role].hasRole[account] = false;\n            emit RoleRevoked(role, account, _msgSender());\n            return true;\n        } else {\n            return false;\n        }\n    }\n}\n"
      },
      "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)\n\npragma solidity ^0.8.20;\n\nimport {ContextUpgradeable} from \"../utils/ContextUpgradeable.sol\";\nimport {Initializable} from \"../proxy/utils/Initializable.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * The initial owner is set to the address provided by the deployer. This can\n * later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\n    /// @custom:storage-location erc7201:openzeppelin.storage.Ownable\n    struct OwnableStorage {\n        address _owner;\n    }\n\n    // keccak256(abi.encode(uint256(keccak256(\"openzeppelin.storage.Ownable\")) - 1)) & ~bytes32(uint256(0xff))\n    bytes32 private constant OwnableStorageLocation = 0x9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300;\n\n    function _getOwnableStorage() private pure returns (OwnableStorage storage $) {\n        assembly {\n            $.slot := OwnableStorageLocation\n        }\n    }\n\n    /**\n     * @dev The caller account is not authorized to perform an operation.\n     */\n    error OwnableUnauthorizedAccount(address account);\n\n    /**\n     * @dev The owner is not a valid owner account. (eg. `address(0)`)\n     */\n    error OwnableInvalidOwner(address owner);\n\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n    /**\n     * @dev Initializes the contract setting the address provided by the deployer as the initial owner.\n     */\n    function __Ownable_init(address initialOwner) internal onlyInitializing {\n        __Ownable_init_unchained(initialOwner);\n    }\n\n    function __Ownable_init_unchained(address initialOwner) internal onlyInitializing {\n        if (initialOwner == address(0)) {\n            revert OwnableInvalidOwner(address(0));\n        }\n        _transferOwnership(initialOwner);\n    }\n\n    /**\n     * @dev Throws if called by any account other than the owner.\n     */\n    modifier onlyOwner() {\n        _checkOwner();\n        _;\n    }\n\n    /**\n     * @dev Returns the address of the current owner.\n     */\n    function owner() public view virtual returns (address) {\n        OwnableStorage storage $ = _getOwnableStorage();\n        return $._owner;\n    }\n\n    /**\n     * @dev Throws if the sender is not the owner.\n     */\n    function _checkOwner() internal view virtual {\n        if (owner() != _msgSender()) {\n            revert OwnableUnauthorizedAccount(_msgSender());\n        }\n    }\n\n    /**\n     * @dev Leaves the contract without owner. It will not be possible to call\n     * `onlyOwner` functions. Can only be called by the current owner.\n     *\n     * NOTE: Renouncing ownership will leave the contract without an owner,\n     * thereby disabling any functionality that is only available to the owner.\n     */\n    function renounceOwnership() public virtual onlyOwner {\n        _transferOwnership(address(0));\n    }\n\n    /**\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\n     * Can only be called by the current owner.\n     */\n    function transferOwnership(address newOwner) public virtual onlyOwner {\n        if (newOwner == address(0)) {\n            revert OwnableInvalidOwner(address(0));\n        }\n        _transferOwnership(newOwner);\n    }\n\n    /**\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\n     * Internal function without access restriction.\n     */\n    function _transferOwnership(address newOwner) internal virtual {\n        OwnableStorage storage $ = _getOwnableStorage();\n        address oldOwner = $._owner;\n        $._owner = newOwner;\n        emit OwnershipTransferred(oldOwner, newOwner);\n    }\n}\n"
      },
      "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.3.0) (proxy/utils/Initializable.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n *\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\n * reused. This mechanism prevents re-execution of each \"step\" but allows the creation of new initialization steps in\n * case an upgrade adds a module that needs to be initialized.\n *\n * For example:\n *\n * [.hljs-theme-light.nopadding]\n * ```solidity\n * contract MyToken is ERC20Upgradeable {\n *     function initialize() initializer public {\n *         __ERC20_init(\"MyToken\", \"MTK\");\n *     }\n * }\n *\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\n *     function initializeV2() reinitializer(2) public {\n *         __ERC20Permit_init(\"MyToken\");\n *     }\n * }\n * ```\n *\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\n *\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\n *\n * [CAUTION]\n * ====\n * Avoid leaving a contract uninitialized.\n *\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\n *\n * [.hljs-theme-light.nopadding]\n * ```\n * /// @custom:oz-upgrades-unsafe-allow constructor\n * constructor() {\n *     _disableInitializers();\n * }\n * ```\n * ====\n */\nabstract contract Initializable {\n    /**\n     * @dev Storage of the initializable contract.\n     *\n     * It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions\n     * when using with upgradeable contracts.\n     *\n     * @custom:storage-location erc7201:openzeppelin.storage.Initializable\n     */\n    struct InitializableStorage {\n        /**\n         * @dev Indicates that the contract has been initialized.\n         */\n        uint64 _initialized;\n        /**\n         * @dev Indicates that the contract is in the process of being initialized.\n         */\n        bool _initializing;\n    }\n\n    // keccak256(abi.encode(uint256(keccak256(\"openzeppelin.storage.Initializable\")) - 1)) & ~bytes32(uint256(0xff))\n    bytes32 private constant INITIALIZABLE_STORAGE = 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00;\n\n    /**\n     * @dev The contract is already initialized.\n     */\n    error InvalidInitialization();\n\n    /**\n     * @dev The contract is not initializing.\n     */\n    error NotInitializing();\n\n    /**\n     * @dev Triggered when the contract has been initialized or reinitialized.\n     */\n    event Initialized(uint64 version);\n\n    /**\n     * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\n     * `onlyInitializing` functions can be used to initialize parent contracts.\n     *\n     * Similar to `reinitializer(1)`, except that in the context of a constructor an `initializer` may be invoked any\n     * number of times. This behavior in the constructor can be useful during testing and is not expected to be used in\n     * production.\n     *\n     * Emits an {Initialized} event.\n     */\n    modifier initializer() {\n        // solhint-disable-next-line var-name-mixedcase\n        InitializableStorage storage $ = _getInitializableStorage();\n\n        // Cache values to avoid duplicated sloads\n        bool isTopLevelCall = !$._initializing;\n        uint64 initialized = $._initialized;\n\n        // Allowed calls:\n        // - initialSetup: the contract is not in the initializing state and no previous version was\n        //                 initialized\n        // - construction: the contract is initialized at version 1 (no reinitialization) and the\n        //                 current contract is just being deployed\n        bool initialSetup = initialized == 0 && isTopLevelCall;\n        bool construction = initialized == 1 && address(this).code.length == 0;\n\n        if (!initialSetup && !construction) {\n            revert InvalidInitialization();\n        }\n        $._initialized = 1;\n        if (isTopLevelCall) {\n            $._initializing = true;\n        }\n        _;\n        if (isTopLevelCall) {\n            $._initializing = false;\n            emit Initialized(1);\n        }\n    }\n\n    /**\n     * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\n     * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\n     * used to initialize parent contracts.\n     *\n     * A reinitializer may be used after the original initialization step. This is essential to configure modules that\n     * are added through upgrades and that require initialization.\n     *\n     * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\n     * cannot be nested. If one is invoked in the context of another, execution will revert.\n     *\n     * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\n     * a contract, executing them in the right order is up to the developer or operator.\n     *\n     * WARNING: Setting the version to 2**64 - 1 will prevent any future reinitialization.\n     *\n     * Emits an {Initialized} event.\n     */\n    modifier reinitializer(uint64 version) {\n        // solhint-disable-next-line var-name-mixedcase\n        InitializableStorage storage $ = _getInitializableStorage();\n\n        if ($._initializing || $._initialized >= version) {\n            revert InvalidInitialization();\n        }\n        $._initialized = version;\n        $._initializing = true;\n        _;\n        $._initializing = false;\n        emit Initialized(version);\n    }\n\n    /**\n     * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\n     * {initializer} and {reinitializer} modifiers, directly or indirectly.\n     */\n    modifier onlyInitializing() {\n        _checkInitializing();\n        _;\n    }\n\n    /**\n     * @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}.\n     */\n    function _checkInitializing() internal view virtual {\n        if (!_isInitializing()) {\n            revert NotInitializing();\n        }\n    }\n\n    /**\n     * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\n     * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\n     * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\n     * through proxies.\n     *\n     * Emits an {Initialized} event the first time it is successfully executed.\n     */\n    function _disableInitializers() internal virtual {\n        // solhint-disable-next-line var-name-mixedcase\n        InitializableStorage storage $ = _getInitializableStorage();\n\n        if ($._initializing) {\n            revert InvalidInitialization();\n        }\n        if ($._initialized != type(uint64).max) {\n            $._initialized = type(uint64).max;\n            emit Initialized(type(uint64).max);\n        }\n    }\n\n    /**\n     * @dev Returns the highest version that has been initialized. See {reinitializer}.\n     */\n    function _getInitializedVersion() internal view returns (uint64) {\n        return _getInitializableStorage()._initialized;\n    }\n\n    /**\n     * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\n     */\n    function _isInitializing() internal view returns (bool) {\n        return _getInitializableStorage()._initializing;\n    }\n\n    /**\n     * @dev Pointer to storage slot. Allows integrators to override it with a custom storage location.\n     *\n     * NOTE: Consider following the ERC-7201 formula to derive storage locations.\n     */\n    function _initializableStorageSlot() internal pure virtual returns (bytes32) {\n        return INITIALIZABLE_STORAGE;\n    }\n\n    /**\n     * @dev Returns a pointer to the storage namespace.\n     */\n    // solhint-disable-next-line var-name-mixedcase\n    function _getInitializableStorage() private pure returns (InitializableStorage storage $) {\n        bytes32 slot = _initializableStorageSlot();\n        assembly {\n            $.slot := slot\n        }\n    }\n}\n"
      },
      "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.3.0) (proxy/utils/UUPSUpgradeable.sol)\n\npragma solidity ^0.8.22;\n\nimport {IERC1822Proxiable} from \"@openzeppelin/contracts/interfaces/draft-IERC1822.sol\";\nimport {ERC1967Utils} from \"@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol\";\nimport {Initializable} from \"./Initializable.sol\";\n\n/**\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\n *\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\n * `UUPSUpgradeable` with a custom implementation of upgrades.\n *\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\n */\nabstract contract UUPSUpgradeable is Initializable, IERC1822Proxiable {\n    /// @custom:oz-upgrades-unsafe-allow state-variable-immutable\n    address private immutable __self = address(this);\n\n    /**\n     * @dev The version of the upgrade interface of the contract. If this getter is missing, both `upgradeTo(address)`\n     * and `upgradeToAndCall(address,bytes)` are present, and `upgradeTo` must be used if no function should be called,\n     * while `upgradeToAndCall` will invoke the `receive` function if the second argument is the empty byte string.\n     * If the getter returns `\"5.0.0\"`, only `upgradeToAndCall(address,bytes)` is present, and the second argument must\n     * be the empty byte string if no function should be called, making it impossible to invoke the `receive` function\n     * during an upgrade.\n     */\n    string public constant UPGRADE_INTERFACE_VERSION = \"5.0.0\";\n\n    /**\n     * @dev The call is from an unauthorized context.\n     */\n    error UUPSUnauthorizedCallContext();\n\n    /**\n     * @dev The storage `slot` is unsupported as a UUID.\n     */\n    error UUPSUnsupportedProxiableUUID(bytes32 slot);\n\n    /**\n     * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\n     * a proxy contract with an implementation (as defined in ERC-1967) pointing to self. This should only be the case\n     * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\n     * function through ERC-1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\n     * fail.\n     */\n    modifier onlyProxy() {\n        _checkProxy();\n        _;\n    }\n\n    /**\n     * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\n     * callable on the implementing contract but not through proxies.\n     */\n    modifier notDelegated() {\n        _checkNotDelegated();\n        _;\n    }\n\n    function __UUPSUpgradeable_init() internal onlyInitializing {\n    }\n\n    function __UUPSUpgradeable_init_unchained() internal onlyInitializing {\n    }\n    /**\n     * @dev Implementation of the ERC-1822 {proxiableUUID} function. This returns the storage slot used by the\n     * implementation. It is used to validate the implementation's compatibility when performing an upgrade.\n     *\n     * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\n     * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\n     * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\n     */\n    function proxiableUUID() external view virtual notDelegated returns (bytes32) {\n        return ERC1967Utils.IMPLEMENTATION_SLOT;\n    }\n\n    /**\n     * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\n     * encoded in `data`.\n     *\n     * Calls {_authorizeUpgrade}.\n     *\n     * Emits an {Upgraded} event.\n     *\n     * @custom:oz-upgrades-unsafe-allow-reachable delegatecall\n     */\n    function upgradeToAndCall(address newImplementation, bytes memory data) public payable virtual onlyProxy {\n        _authorizeUpgrade(newImplementation);\n        _upgradeToAndCallUUPS(newImplementation, data);\n    }\n\n    /**\n     * @dev Reverts if the execution is not performed via delegatecall or the execution\n     * context is not of a proxy with an ERC-1967 compliant implementation pointing to self.\n     */\n    function _checkProxy() internal view virtual {\n        if (\n            address(this) == __self || // Must be called through delegatecall\n            ERC1967Utils.getImplementation() != __self // Must be called through an active proxy\n        ) {\n            revert UUPSUnauthorizedCallContext();\n        }\n    }\n\n    /**\n     * @dev Reverts if the execution is performed via delegatecall.\n     * See {notDelegated}.\n     */\n    function _checkNotDelegated() internal view virtual {\n        if (address(this) != __self) {\n            // Must not be called through delegatecall\n            revert UUPSUnauthorizedCallContext();\n        }\n    }\n\n    /**\n     * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\n     * {upgradeToAndCall}.\n     *\n     * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\n     *\n     * ```solidity\n     * function _authorizeUpgrade(address) internal onlyOwner {}\n     * ```\n     */\n    function _authorizeUpgrade(address newImplementation) internal virtual;\n\n    /**\n     * @dev Performs an implementation upgrade with a security check for UUPS proxies, and additional setup call.\n     *\n     * As a security check, {proxiableUUID} is invoked in the new implementation, and the return value\n     * is expected to be the implementation slot in ERC-1967.\n     *\n     * Emits an {IERC1967-Upgraded} event.\n     */\n    function _upgradeToAndCallUUPS(address newImplementation, bytes memory data) private {\n        try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\n            if (slot != ERC1967Utils.IMPLEMENTATION_SLOT) {\n                revert UUPSUnsupportedProxiableUUID(slot);\n            }\n            ERC1967Utils.upgradeToAndCall(newImplementation, data);\n        } catch {\n            // The implementation is not UUPS\n            revert ERC1967Utils.ERC1967InvalidImplementation(newImplementation);\n        }\n    }\n}\n"
      },
      "@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155Upgradeable.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (token/ERC1155/ERC1155.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC1155} from \"@openzeppelin/contracts/token/ERC1155/IERC1155.sol\";\nimport {IERC1155MetadataURI} from \"@openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol\";\nimport {ERC1155Utils} from \"@openzeppelin/contracts/token/ERC1155/utils/ERC1155Utils.sol\";\nimport {ContextUpgradeable} from \"../../utils/ContextUpgradeable.sol\";\nimport {IERC165} from \"@openzeppelin/contracts/utils/introspection/IERC165.sol\";\nimport {ERC165Upgradeable} from \"../../utils/introspection/ERC165Upgradeable.sol\";\nimport {Arrays} from \"@openzeppelin/contracts/utils/Arrays.sol\";\nimport {IERC1155Errors} from \"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\";\nimport {Initializable} from \"../../proxy/utils/Initializable.sol\";\n\n/**\n * @dev Implementation of the basic standard multi-token.\n * See https://eips.ethereum.org/EIPS/eip-1155\n * Originally based on code by Enjin: https://github.com/enjin/erc-1155\n */\nabstract contract ERC1155Upgradeable is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC1155, IERC1155MetadataURI, IERC1155Errors {\n    using Arrays for uint256[];\n    using Arrays for address[];\n\n    /// @custom:storage-location erc7201:openzeppelin.storage.ERC1155\n    struct ERC1155Storage {\n        mapping(uint256 id => mapping(address account => uint256)) _balances;\n\n        mapping(address account => mapping(address operator => bool)) _operatorApprovals;\n\n        // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json\n        string _uri;\n    }\n\n    // keccak256(abi.encode(uint256(keccak256(\"openzeppelin.storage.ERC1155\")) - 1)) & ~bytes32(uint256(0xff))\n    bytes32 private constant ERC1155StorageLocation = 0x88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c4500;\n\n    function _getERC1155Storage() private pure returns (ERC1155Storage storage $) {\n        assembly {\n            $.slot := ERC1155StorageLocation\n        }\n    }\n\n    /**\n     * @dev See {_setURI}.\n     */\n    function __ERC1155_init(string memory uri_) internal onlyInitializing {\n        __ERC1155_init_unchained(uri_);\n    }\n\n    function __ERC1155_init_unchained(string memory uri_) internal onlyInitializing {\n        _setURI(uri_);\n    }\n\n    /// @inheritdoc IERC165\n    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165Upgradeable, IERC165) returns (bool) {\n        return\n            interfaceId == type(IERC1155).interfaceId ||\n            interfaceId == type(IERC1155MetadataURI).interfaceId ||\n            super.supportsInterface(interfaceId);\n    }\n\n    /**\n     * @dev See {IERC1155MetadataURI-uri}.\n     *\n     * This implementation returns the same URI for *all* token types. It relies\n     * on the token type ID substitution mechanism\n     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the ERC].\n     *\n     * Clients calling this function must replace the `\\{id\\}` substring with the\n     * actual token type ID.\n     */\n    function uri(uint256 /* id */) public view virtual returns (string memory) {\n        ERC1155Storage storage $ = _getERC1155Storage();\n        return $._uri;\n    }\n\n    /// @inheritdoc IERC1155\n    function balanceOf(address account, uint256 id) public view virtual returns (uint256) {\n        ERC1155Storage storage $ = _getERC1155Storage();\n        return $._balances[id][account];\n    }\n\n    /**\n     * @dev See {IERC1155-balanceOfBatch}.\n     *\n     * Requirements:\n     *\n     * - `accounts` and `ids` must have the same length.\n     */\n    function balanceOfBatch(\n        address[] memory accounts,\n        uint256[] memory ids\n    ) public view virtual returns (uint256[] memory) {\n        if (accounts.length != ids.length) {\n            revert ERC1155InvalidArrayLength(ids.length, accounts.length);\n        }\n\n        uint256[] memory batchBalances = new uint256[](accounts.length);\n\n        for (uint256 i = 0; i < accounts.length; ++i) {\n            batchBalances[i] = balanceOf(accounts.unsafeMemoryAccess(i), ids.unsafeMemoryAccess(i));\n        }\n\n        return batchBalances;\n    }\n\n    /// @inheritdoc IERC1155\n    function setApprovalForAll(address operator, bool approved) public virtual {\n        _setApprovalForAll(_msgSender(), operator, approved);\n    }\n\n    /// @inheritdoc IERC1155\n    function isApprovedForAll(address account, address operator) public view virtual returns (bool) {\n        ERC1155Storage storage $ = _getERC1155Storage();\n        return $._operatorApprovals[account][operator];\n    }\n\n    /// @inheritdoc IERC1155\n    function safeTransferFrom(address from, address to, uint256 id, uint256 value, bytes memory data) public virtual {\n        address sender = _msgSender();\n        if (from != sender && !isApprovedForAll(from, sender)) {\n            revert ERC1155MissingApprovalForAll(sender, from);\n        }\n        _safeTransferFrom(from, to, id, value, data);\n    }\n\n    /// @inheritdoc IERC1155\n    function safeBatchTransferFrom(\n        address from,\n        address to,\n        uint256[] memory ids,\n        uint256[] memory values,\n        bytes memory data\n    ) public virtual {\n        address sender = _msgSender();\n        if (from != sender && !isApprovedForAll(from, sender)) {\n            revert ERC1155MissingApprovalForAll(sender, from);\n        }\n        _safeBatchTransferFrom(from, to, ids, values, data);\n    }\n\n    /**\n     * @dev Transfers a `value` amount of tokens of type `id` from `from` to `to`. Will mint (or burn) if `from`\n     * (or `to`) is the zero address.\n     *\n     * Emits a {TransferSingle} event if the arrays contain one element, and {TransferBatch} otherwise.\n     *\n     * Requirements:\n     *\n     * - If `to` refers to a smart contract, it must implement either {IERC1155Receiver-onERC1155Received}\n     *   or {IERC1155Receiver-onERC1155BatchReceived} and return the acceptance magic value.\n     * - `ids` and `values` must have the same length.\n     *\n     * NOTE: The ERC-1155 acceptance check is not performed in this function. See {_updateWithAcceptanceCheck} instead.\n     */\n    function _update(address from, address to, uint256[] memory ids, uint256[] memory values) internal virtual {\n        ERC1155Storage storage $ = _getERC1155Storage();\n        if (ids.length != values.length) {\n            revert ERC1155InvalidArrayLength(ids.length, values.length);\n        }\n\n        address operator = _msgSender();\n\n        for (uint256 i = 0; i < ids.length; ++i) {\n            uint256 id = ids.unsafeMemoryAccess(i);\n            uint256 value = values.unsafeMemoryAccess(i);\n\n            if (from != address(0)) {\n                uint256 fromBalance = $._balances[id][from];\n                if (fromBalance < value) {\n                    revert ERC1155InsufficientBalance(from, fromBalance, value, id);\n                }\n                unchecked {\n                    // Overflow not possible: value <= fromBalance\n                    $._balances[id][from] = fromBalance - value;\n                }\n            }\n\n            if (to != address(0)) {\n                $._balances[id][to] += value;\n            }\n        }\n\n        if (ids.length == 1) {\n            uint256 id = ids.unsafeMemoryAccess(0);\n            uint256 value = values.unsafeMemoryAccess(0);\n            emit TransferSingle(operator, from, to, id, value);\n        } else {\n            emit TransferBatch(operator, from, to, ids, values);\n        }\n    }\n\n    /**\n     * @dev Version of {_update} that performs the token acceptance check by calling\n     * {IERC1155Receiver-onERC1155Received} or {IERC1155Receiver-onERC1155BatchReceived} on the receiver address if it\n     * contains code (eg. is a smart contract at the moment of execution).\n     *\n     * IMPORTANT: Overriding this function is discouraged because it poses a reentrancy risk from the receiver. So any\n     * update to the contract state after this function would break the check-effect-interaction pattern. Consider\n     * overriding {_update} instead.\n     */\n    function _updateWithAcceptanceCheck(\n        address from,\n        address to,\n        uint256[] memory ids,\n        uint256[] memory values,\n        bytes memory data\n    ) internal virtual {\n        _update(from, to, ids, values);\n        if (to != address(0)) {\n            address operator = _msgSender();\n            if (ids.length == 1) {\n                uint256 id = ids.unsafeMemoryAccess(0);\n                uint256 value = values.unsafeMemoryAccess(0);\n                ERC1155Utils.checkOnERC1155Received(operator, from, to, id, value, data);\n            } else {\n                ERC1155Utils.checkOnERC1155BatchReceived(operator, from, to, ids, values, data);\n            }\n        }\n    }\n\n    /**\n     * @dev Transfers a `value` tokens of token type `id` from `from` to `to`.\n     *\n     * Emits a {TransferSingle} event.\n     *\n     * Requirements:\n     *\n     * - `to` cannot be the zero address.\n     * - `from` must have a balance of tokens of type `id` of at least `value` amount.\n     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\n     * acceptance magic value.\n     */\n    function _safeTransferFrom(address from, address to, uint256 id, uint256 value, bytes memory data) internal {\n        if (to == address(0)) {\n            revert ERC1155InvalidReceiver(address(0));\n        }\n        if (from == address(0)) {\n            revert ERC1155InvalidSender(address(0));\n        }\n        (uint256[] memory ids, uint256[] memory values) = _asSingletonArrays(id, value);\n        _updateWithAcceptanceCheck(from, to, ids, values, data);\n    }\n\n    /**\n     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}.\n     *\n     * Emits a {TransferBatch} event.\n     *\n     * Requirements:\n     *\n     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\n     * acceptance magic value.\n     * - `ids` and `values` must have the same length.\n     */\n    function _safeBatchTransferFrom(\n        address from,\n        address to,\n        uint256[] memory ids,\n        uint256[] memory values,\n        bytes memory data\n    ) internal {\n        if (to == address(0)) {\n            revert ERC1155InvalidReceiver(address(0));\n        }\n        if (from == address(0)) {\n            revert ERC1155InvalidSender(address(0));\n        }\n        _updateWithAcceptanceCheck(from, to, ids, values, data);\n    }\n\n    /**\n     * @dev Sets a new URI for all token types, by relying on the token type ID\n     * substitution mechanism\n     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the ERC].\n     *\n     * By this mechanism, any occurrence of the `\\{id\\}` substring in either the\n     * URI or any of the values in the JSON file at said URI will be replaced by\n     * clients with the token type ID.\n     *\n     * For example, the `https://token-cdn-domain/\\{id\\}.json` URI would be\n     * interpreted by clients as\n     * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`\n     * for token type ID 0x4cce0.\n     *\n     * See {uri}.\n     *\n     * Because these URIs cannot be meaningfully represented by the {URI} event,\n     * this function emits no events.\n     */\n    function _setURI(string memory newuri) internal virtual {\n        ERC1155Storage storage $ = _getERC1155Storage();\n        $._uri = newuri;\n    }\n\n    /**\n     * @dev Creates a `value` amount of tokens of type `id`, and assigns them to `to`.\n     *\n     * Emits a {TransferSingle} event.\n     *\n     * Requirements:\n     *\n     * - `to` cannot be the zero address.\n     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\n     * acceptance magic value.\n     */\n    function _mint(address to, uint256 id, uint256 value, bytes memory data) internal {\n        if (to == address(0)) {\n            revert ERC1155InvalidReceiver(address(0));\n        }\n        (uint256[] memory ids, uint256[] memory values) = _asSingletonArrays(id, value);\n        _updateWithAcceptanceCheck(address(0), to, ids, values, data);\n    }\n\n    /**\n     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.\n     *\n     * Emits a {TransferBatch} event.\n     *\n     * Requirements:\n     *\n     * - `ids` and `values` must have the same length.\n     * - `to` cannot be the zero address.\n     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\n     * acceptance magic value.\n     */\n    function _mintBatch(address to, uint256[] memory ids, uint256[] memory values, bytes memory data) internal {\n        if (to == address(0)) {\n            revert ERC1155InvalidReceiver(address(0));\n        }\n        _updateWithAcceptanceCheck(address(0), to, ids, values, data);\n    }\n\n    /**\n     * @dev Destroys a `value` amount of tokens of type `id` from `from`\n     *\n     * Emits a {TransferSingle} event.\n     *\n     * Requirements:\n     *\n     * - `from` cannot be the zero address.\n     * - `from` must have at least `value` amount of tokens of type `id`.\n     */\n    function _burn(address from, uint256 id, uint256 value) internal {\n        if (from == address(0)) {\n            revert ERC1155InvalidSender(address(0));\n        }\n        (uint256[] memory ids, uint256[] memory values) = _asSingletonArrays(id, value);\n        _updateWithAcceptanceCheck(from, address(0), ids, values, \"\");\n    }\n\n    /**\n     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.\n     *\n     * Emits a {TransferBatch} event.\n     *\n     * Requirements:\n     *\n     * - `from` cannot be the zero address.\n     * - `from` must have at least `value` amount of tokens of type `id`.\n     * - `ids` and `values` must have the same length.\n     */\n    function _burnBatch(address from, uint256[] memory ids, uint256[] memory values) internal {\n        if (from == address(0)) {\n            revert ERC1155InvalidSender(address(0));\n        }\n        _updateWithAcceptanceCheck(from, address(0), ids, values, \"\");\n    }\n\n    /**\n     * @dev Approve `operator` to operate on all of `owner` tokens\n     *\n     * Emits an {ApprovalForAll} event.\n     *\n     * Requirements:\n     *\n     * - `operator` cannot be the zero address.\n     */\n    function _setApprovalForAll(address owner, address operator, bool approved) internal virtual {\n        ERC1155Storage storage $ = _getERC1155Storage();\n        if (operator == address(0)) {\n            revert ERC1155InvalidOperator(address(0));\n        }\n        $._operatorApprovals[owner][operator] = approved;\n        emit ApprovalForAll(owner, operator, approved);\n    }\n\n    /**\n     * @dev Creates an array in memory with only one value for each of the elements provided.\n     */\n    function _asSingletonArrays(\n        uint256 element1,\n        uint256 element2\n    ) private pure returns (uint256[] memory array1, uint256[] memory array2) {\n        assembly (\"memory-safe\") {\n            // Load the free memory pointer\n            array1 := mload(0x40)\n            // Set array length to 1\n            mstore(array1, 1)\n            // Store the single element at the next word after the length (where content starts)\n            mstore(add(array1, 0x20), element1)\n\n            // Repeat for next array locating it right after the first array\n            array2 := add(array1, 0x40)\n            mstore(array2, 1)\n            mstore(add(array2, 0x20), element2)\n\n            // Update the free memory pointer by pointing after the second array\n            mstore(0x40, add(array2, 0x40))\n        }\n    }\n}\n"
      },
      "@openzeppelin/contracts-upgradeable/token/ERC1155/extensions/ERC1155SupplyUpgradeable.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (token/ERC1155/extensions/ERC1155Supply.sol)\n\npragma solidity ^0.8.20;\n\nimport {ERC1155Upgradeable} from \"../ERC1155Upgradeable.sol\";\nimport {Arrays} from \"@openzeppelin/contracts/utils/Arrays.sol\";\nimport {Initializable} from \"../../../proxy/utils/Initializable.sol\";\n\n/**\n * @dev Extension of ERC-1155 that adds tracking of total supply per id.\n *\n * Useful for scenarios where Fungible and Non-fungible tokens have to be\n * clearly identified. Note: While a totalSupply of 1 might mean the\n * corresponding is an NFT, there is no guarantees that no other token with the\n * same id are not going to be minted.\n *\n * NOTE: This contract implies a global limit of 2**256 - 1 to the number of tokens\n * that can be minted.\n *\n * CAUTION: This extension should not be added in an upgrade to an already deployed contract.\n */\nabstract contract ERC1155SupplyUpgradeable is Initializable, ERC1155Upgradeable {\n    using Arrays for uint256[];\n\n    /// @custom:storage-location erc7201:openzeppelin.storage.ERC1155Supply\n    struct ERC1155SupplyStorage {\n        mapping(uint256 id => uint256) _totalSupply;\n        uint256 _totalSupplyAll;\n    }\n\n    // keccak256(abi.encode(uint256(keccak256(\"openzeppelin.storage.ERC1155Supply\")) - 1)) & ~bytes32(uint256(0xff))\n    bytes32 private constant ERC1155SupplyStorageLocation = 0x4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e2800;\n\n    function _getERC1155SupplyStorage() private pure returns (ERC1155SupplyStorage storage $) {\n        assembly {\n            $.slot := ERC1155SupplyStorageLocation\n        }\n    }\n\n    function __ERC1155Supply_init() internal onlyInitializing {\n    }\n\n    function __ERC1155Supply_init_unchained() internal onlyInitializing {\n    }\n    /**\n     * @dev Total value of tokens in with a given id.\n     */\n    function totalSupply(uint256 id) public view virtual returns (uint256) {\n        ERC1155SupplyStorage storage $ = _getERC1155SupplyStorage();\n        return $._totalSupply[id];\n    }\n\n    /**\n     * @dev Total value of tokens.\n     */\n    function totalSupply() public view virtual returns (uint256) {\n        ERC1155SupplyStorage storage $ = _getERC1155SupplyStorage();\n        return $._totalSupplyAll;\n    }\n\n    /**\n     * @dev Indicates whether any token exist with a given id, or not.\n     */\n    function exists(uint256 id) public view virtual returns (bool) {\n        return totalSupply(id) > 0;\n    }\n\n    /// @inheritdoc ERC1155Upgradeable\n    function _update(\n        address from,\n        address to,\n        uint256[] memory ids,\n        uint256[] memory values\n    ) internal virtual override {\n        ERC1155SupplyStorage storage $ = _getERC1155SupplyStorage();\n        super._update(from, to, ids, values);\n\n        if (from == address(0)) {\n            uint256 totalMintValue = 0;\n            for (uint256 i = 0; i < ids.length; ++i) {\n                uint256 value = values.unsafeMemoryAccess(i);\n                // Overflow check required: The rest of the code assumes that totalSupply never overflows\n                $._totalSupply[ids.unsafeMemoryAccess(i)] += value;\n                totalMintValue += value;\n            }\n            // Overflow check required: The rest of the code assumes that totalSupplyAll never overflows\n            $._totalSupplyAll += totalMintValue;\n        }\n\n        if (to == address(0)) {\n            uint256 totalBurnValue = 0;\n            for (uint256 i = 0; i < ids.length; ++i) {\n                uint256 value = values.unsafeMemoryAccess(i);\n\n                unchecked {\n                    // Overflow not possible: values[i] <= balanceOf(from, ids[i]) <= totalSupply(ids[i])\n                    $._totalSupply[ids.unsafeMemoryAccess(i)] -= value;\n                    // Overflow not possible: sum_i(values[i]) <= sum_i(totalSupply(ids[i])) <= totalSupplyAll\n                    totalBurnValue += value;\n                }\n            }\n            unchecked {\n                // Overflow not possible: totalBurnValue = sum_i(values[i]) <= sum_i(totalSupply(ids[i])) <= totalSupplyAll\n                $._totalSupplyAll -= totalBurnValue;\n            }\n        }\n    }\n}\n"
      },
      "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)\n\npragma solidity ^0.8.20;\nimport {Initializable} from \"../proxy/utils/Initializable.sol\";\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract ContextUpgradeable is Initializable {\n    function __Context_init() internal onlyInitializing {\n    }\n\n    function __Context_init_unchained() internal onlyInitializing {\n    }\n    function _msgSender() internal view virtual returns (address) {\n        return msg.sender;\n    }\n\n    function _msgData() internal view virtual returns (bytes calldata) {\n        return msg.data;\n    }\n\n    function _contextSuffixLength() internal view virtual returns (uint256) {\n        return 0;\n    }\n}\n"
      },
      "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (utils/introspection/ERC165.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC165} from \"@openzeppelin/contracts/utils/introspection/IERC165.sol\";\nimport {Initializable} from \"../../proxy/utils/Initializable.sol\";\n\n/**\n * @dev Implementation of the {IERC165} interface.\n *\n * Contracts that want to implement ERC-165 should inherit from this contract and override {supportsInterface} to check\n * for the additional interface id that will be supported. For example:\n *\n * ```solidity\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\n * }\n * ```\n */\nabstract contract ERC165Upgradeable is Initializable, IERC165 {\n    function __ERC165_init() internal onlyInitializing {\n    }\n\n    function __ERC165_init_unchained() internal onlyInitializing {\n    }\n    /// @inheritdoc IERC165\n    function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) {\n        return interfaceId == type(IERC165).interfaceId;\n    }\n}\n"
      },
      "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.3.0) (utils/Pausable.sol)\n\npragma solidity ^0.8.20;\n\nimport {ContextUpgradeable} from \"../utils/ContextUpgradeable.sol\";\nimport {Initializable} from \"../proxy/utils/Initializable.sol\";\n\n/**\n * @dev Contract module which allows children to implement an emergency stop\n * mechanism that can be triggered by an authorized account.\n *\n * This module is used through inheritance. It will make available the\n * modifiers `whenNotPaused` and `whenPaused`, which can be applied to\n * the functions of your contract. Note that they will not be pausable by\n * simply including this module, only once the modifiers are put in place.\n */\nabstract contract PausableUpgradeable is Initializable, ContextUpgradeable {\n    /// @custom:storage-location erc7201:openzeppelin.storage.Pausable\n    struct PausableStorage {\n        bool _paused;\n    }\n\n    // keccak256(abi.encode(uint256(keccak256(\"openzeppelin.storage.Pausable\")) - 1)) & ~bytes32(uint256(0xff))\n    bytes32 private constant PausableStorageLocation = 0xcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300;\n\n    function _getPausableStorage() private pure returns (PausableStorage storage $) {\n        assembly {\n            $.slot := PausableStorageLocation\n        }\n    }\n\n    /**\n     * @dev Emitted when the pause is triggered by `account`.\n     */\n    event Paused(address account);\n\n    /**\n     * @dev Emitted when the pause is lifted by `account`.\n     */\n    event Unpaused(address account);\n\n    /**\n     * @dev The operation failed because the contract is paused.\n     */\n    error EnforcedPause();\n\n    /**\n     * @dev The operation failed because the contract is not paused.\n     */\n    error ExpectedPause();\n\n    /**\n     * @dev Modifier to make a function callable only when the contract is not paused.\n     *\n     * Requirements:\n     *\n     * - The contract must not be paused.\n     */\n    modifier whenNotPaused() {\n        _requireNotPaused();\n        _;\n    }\n\n    /**\n     * @dev Modifier to make a function callable only when the contract is paused.\n     *\n     * Requirements:\n     *\n     * - The contract must be paused.\n     */\n    modifier whenPaused() {\n        _requirePaused();\n        _;\n    }\n\n    function __Pausable_init() internal onlyInitializing {\n    }\n\n    function __Pausable_init_unchained() internal onlyInitializing {\n    }\n    /**\n     * @dev Returns true if the contract is paused, and false otherwise.\n     */\n    function paused() public view virtual returns (bool) {\n        PausableStorage storage $ = _getPausableStorage();\n        return $._paused;\n    }\n\n    /**\n     * @dev Throws if the contract is paused.\n     */\n    function _requireNotPaused() internal view virtual {\n        if (paused()) {\n            revert EnforcedPause();\n        }\n    }\n\n    /**\n     * @dev Throws if the contract is not paused.\n     */\n    function _requirePaused() internal view virtual {\n        if (!paused()) {\n            revert ExpectedPause();\n        }\n    }\n\n    /**\n     * @dev Triggers stopped state.\n     *\n     * Requirements:\n     *\n     * - The contract must not be paused.\n     */\n    function _pause() internal virtual whenNotPaused {\n        PausableStorage storage $ = _getPausableStorage();\n        $._paused = true;\n        emit Paused(_msgSender());\n    }\n\n    /**\n     * @dev Returns to normal state.\n     *\n     * Requirements:\n     *\n     * - The contract must be paused.\n     */\n    function _unpause() internal virtual whenPaused {\n        PausableStorage storage $ = _getPausableStorage();\n        $._paused = false;\n        emit Unpaused(_msgSender());\n    }\n}\n"
      },
      "@openzeppelin/contracts/access/IAccessControl.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (access/IAccessControl.sol)\n\npragma solidity >=0.8.4;\n\n/**\n * @dev External interface of AccessControl declared to support ERC-165 detection.\n */\ninterface IAccessControl {\n    /**\n     * @dev The `account` is missing a role.\n     */\n    error AccessControlUnauthorizedAccount(address account, bytes32 neededRole);\n\n    /**\n     * @dev The caller of a function is not the expected one.\n     *\n     * NOTE: Don't confuse with {AccessControlUnauthorizedAccount}.\n     */\n    error AccessControlBadConfirmation();\n\n    /**\n     * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\n     *\n     * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\n     * {RoleAdminChanged} not being emitted to signal this.\n     */\n    event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);\n\n    /**\n     * @dev Emitted when `account` is granted `role`.\n     *\n     * `sender` is the account that originated the contract call. This account bears the admin role (for the granted role).\n     * Expected in cases where the role was granted using the internal {AccessControl-_grantRole}.\n     */\n    event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\n\n    /**\n     * @dev Emitted when `account` is revoked `role`.\n     *\n     * `sender` is the account that originated the contract call:\n     *   - if using `revokeRole`, it is the admin role bearer\n     *   - if using `renounceRole`, it is the role bearer (i.e. `account`)\n     */\n    event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\n\n    /**\n     * @dev Returns `true` if `account` has been granted `role`.\n     */\n    function hasRole(bytes32 role, address account) external view returns (bool);\n\n    /**\n     * @dev Returns the admin role that controls `role`. See {grantRole} and\n     * {revokeRole}.\n     *\n     * To change a role's admin, use {AccessControl-_setRoleAdmin}.\n     */\n    function getRoleAdmin(bytes32 role) external view returns (bytes32);\n\n    /**\n     * @dev Grants `role` to `account`.\n     *\n     * If `account` had not been already granted `role`, emits a {RoleGranted}\n     * event.\n     *\n     * Requirements:\n     *\n     * - the caller must have ``role``'s admin role.\n     */\n    function grantRole(bytes32 role, address account) external;\n\n    /**\n     * @dev Revokes `role` from `account`.\n     *\n     * If `account` had been granted `role`, emits a {RoleRevoked} event.\n     *\n     * Requirements:\n     *\n     * - the caller must have ``role``'s admin role.\n     */\n    function revokeRole(bytes32 role, address account) external;\n\n    /**\n     * @dev Revokes `role` from the calling account.\n     *\n     * Roles are often managed via {grantRole} and {revokeRole}: this function's\n     * purpose is to provide a mechanism for accounts to lose their privileges\n     * if they are compromised (such as when a trusted device is misplaced).\n     *\n     * If the calling account had been granted `role`, emits a {RoleRevoked}\n     * event.\n     *\n     * Requirements:\n     *\n     * - the caller must be `callerConfirmation`.\n     */\n    function renounceRole(bytes32 role, address callerConfirmation) external;\n}\n"
      },
      "@openzeppelin/contracts/interfaces/draft-IERC1822.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (interfaces/draft-IERC1822.sol)\n\npragma solidity >=0.4.16;\n\n/**\n * @dev ERC-1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\n * proxy whose upgrades are fully controlled by the current implementation.\n */\ninterface IERC1822Proxiable {\n    /**\n     * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\n     * address.\n     *\n     * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\n     * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\n     * function revert if invoked through a proxy.\n     */\n    function proxiableUUID() external view returns (bytes32);\n}\n"
      },
      "@openzeppelin/contracts/interfaces/draft-IERC6093.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (interfaces/draft-IERC6093.sol)\npragma solidity >=0.8.4;\n\n/**\n * @dev Standard ERC-20 Errors\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens.\n */\ninterface IERC20Errors {\n    /**\n     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\n     * @param sender Address whose tokens are being transferred.\n     * @param balance Current balance for the interacting account.\n     * @param needed Minimum amount required to perform a transfer.\n     */\n    error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);\n\n    /**\n     * @dev Indicates a failure with the token `sender`. Used in transfers.\n     * @param sender Address whose tokens are being transferred.\n     */\n    error ERC20InvalidSender(address sender);\n\n    /**\n     * @dev Indicates a failure with the token `receiver`. Used in transfers.\n     * @param receiver Address to which tokens are being transferred.\n     */\n    error ERC20InvalidReceiver(address receiver);\n\n    /**\n     * @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers.\n     * @param spender Address that may be allowed to operate on tokens without being their owner.\n     * @param allowance Amount of tokens a `spender` is allowed to operate with.\n     * @param needed Minimum amount required to perform a transfer.\n     */\n    error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);\n\n    /**\n     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n     * @param approver Address initiating an approval operation.\n     */\n    error ERC20InvalidApprover(address approver);\n\n    /**\n     * @dev Indicates a failure with the `spender` to be approved. Used in approvals.\n     * @param spender Address that may be allowed to operate on tokens without being their owner.\n     */\n    error ERC20InvalidSpender(address spender);\n}\n\n/**\n * @dev Standard ERC-721 Errors\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens.\n */\ninterface IERC721Errors {\n    /**\n     * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-20.\n     * Used in balance queries.\n     * @param owner Address of the current owner of a token.\n     */\n    error ERC721InvalidOwner(address owner);\n\n    /**\n     * @dev Indicates a `tokenId` whose `owner` is the zero address.\n     * @param tokenId Identifier number of a token.\n     */\n    error ERC721NonexistentToken(uint256 tokenId);\n\n    /**\n     * @dev Indicates an error related to the ownership over a particular token. Used in transfers.\n     * @param sender Address whose tokens are being transferred.\n     * @param tokenId Identifier number of a token.\n     * @param owner Address of the current owner of a token.\n     */\n    error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);\n\n    /**\n     * @dev Indicates a failure with the token `sender`. Used in transfers.\n     * @param sender Address whose tokens are being transferred.\n     */\n    error ERC721InvalidSender(address sender);\n\n    /**\n     * @dev Indicates a failure with the token `receiver`. Used in transfers.\n     * @param receiver Address to which tokens are being transferred.\n     */\n    error ERC721InvalidReceiver(address receiver);\n\n    /**\n     * @dev Indicates a failure with the `operator`’s approval. Used in transfers.\n     * @param operator Address that may be allowed to operate on tokens without being their owner.\n     * @param tokenId Identifier number of a token.\n     */\n    error ERC721InsufficientApproval(address operator, uint256 tokenId);\n\n    /**\n     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n     * @param approver Address initiating an approval operation.\n     */\n    error ERC721InvalidApprover(address approver);\n\n    /**\n     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.\n     * @param operator Address that may be allowed to operate on tokens without being their owner.\n     */\n    error ERC721InvalidOperator(address operator);\n}\n\n/**\n * @dev Standard ERC-1155 Errors\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 tokens.\n */\ninterface IERC1155Errors {\n    /**\n     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\n     * @param sender Address whose tokens are being transferred.\n     * @param balance Current balance for the interacting account.\n     * @param needed Minimum amount required to perform a transfer.\n     * @param tokenId Identifier number of a token.\n     */\n    error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId);\n\n    /**\n     * @dev Indicates a failure with the token `sender`. Used in transfers.\n     * @param sender Address whose tokens are being transferred.\n     */\n    error ERC1155InvalidSender(address sender);\n\n    /**\n     * @dev Indicates a failure with the token `receiver`. Used in transfers.\n     * @param receiver Address to which tokens are being transferred.\n     */\n    error ERC1155InvalidReceiver(address receiver);\n\n    /**\n     * @dev Indicates a failure with the `operator`’s approval. Used in transfers.\n     * @param operator Address that may be allowed to operate on tokens without being their owner.\n     * @param owner Address of the current owner of a token.\n     */\n    error ERC1155MissingApprovalForAll(address operator, address owner);\n\n    /**\n     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n     * @param approver Address initiating an approval operation.\n     */\n    error ERC1155InvalidApprover(address approver);\n\n    /**\n     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.\n     * @param operator Address that may be allowed to operate on tokens without being their owner.\n     */\n    error ERC1155InvalidOperator(address operator);\n\n    /**\n     * @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.\n     * Used in batch transfers.\n     * @param idsLength Length of the array of token identifiers\n     * @param valuesLength Length of the array of token amounts\n     */\n    error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);\n}\n"
      },
      "@openzeppelin/contracts/interfaces/IERC1967.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (interfaces/IERC1967.sol)\n\npragma solidity >=0.4.11;\n\n/**\n * @dev ERC-1967: Proxy Storage Slots. This interface contains the events defined in the ERC.\n */\ninterface IERC1967 {\n    /**\n     * @dev Emitted when the implementation is upgraded.\n     */\n    event Upgraded(address indexed implementation);\n\n    /**\n     * @dev Emitted when the admin account has changed.\n     */\n    event AdminChanged(address previousAdmin, address newAdmin);\n\n    /**\n     * @dev Emitted when the beacon is changed.\n     */\n    event BeaconUpgraded(address indexed beacon);\n}\n"
      },
      "@openzeppelin/contracts/proxy/beacon/IBeacon.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (proxy/beacon/IBeacon.sol)\n\npragma solidity >=0.4.16;\n\n/**\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\n */\ninterface IBeacon {\n    /**\n     * @dev Must return an address that can be used as a delegate call target.\n     *\n     * {UpgradeableBeacon} will check that this address is a contract.\n     */\n    function implementation() external view returns (address);\n}\n"
      },
      "@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (proxy/ERC1967/ERC1967Utils.sol)\n\npragma solidity ^0.8.21;\n\nimport {IBeacon} from \"../beacon/IBeacon.sol\";\nimport {IERC1967} from \"../../interfaces/IERC1967.sol\";\nimport {Address} from \"../../utils/Address.sol\";\nimport {StorageSlot} from \"../../utils/StorageSlot.sol\";\n\n/**\n * @dev This library provides getters and event emitting update functions for\n * https://eips.ethereum.org/EIPS/eip-1967[ERC-1967] slots.\n */\nlibrary ERC1967Utils {\n    /**\n     * @dev Storage slot with the address of the current implementation.\n     * This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1.\n     */\n    // solhint-disable-next-line private-vars-leading-underscore\n    bytes32 internal constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n\n    /**\n     * @dev The `implementation` of the proxy is invalid.\n     */\n    error ERC1967InvalidImplementation(address implementation);\n\n    /**\n     * @dev The `admin` of the proxy is invalid.\n     */\n    error ERC1967InvalidAdmin(address admin);\n\n    /**\n     * @dev The `beacon` of the proxy is invalid.\n     */\n    error ERC1967InvalidBeacon(address beacon);\n\n    /**\n     * @dev An upgrade function sees `msg.value > 0` that may be lost.\n     */\n    error ERC1967NonPayable();\n\n    /**\n     * @dev Returns the current implementation address.\n     */\n    function getImplementation() internal view returns (address) {\n        return StorageSlot.getAddressSlot(IMPLEMENTATION_SLOT).value;\n    }\n\n    /**\n     * @dev Stores a new address in the ERC-1967 implementation slot.\n     */\n    function _setImplementation(address newImplementation) private {\n        if (newImplementation.code.length == 0) {\n            revert ERC1967InvalidImplementation(newImplementation);\n        }\n        StorageSlot.getAddressSlot(IMPLEMENTATION_SLOT).value = newImplementation;\n    }\n\n    /**\n     * @dev Performs implementation upgrade with additional setup call if data is nonempty.\n     * This function is payable only if the setup call is performed, otherwise `msg.value` is rejected\n     * to avoid stuck value in the contract.\n     *\n     * Emits an {IERC1967-Upgraded} event.\n     */\n    function upgradeToAndCall(address newImplementation, bytes memory data) internal {\n        _setImplementation(newImplementation);\n        emit IERC1967.Upgraded(newImplementation);\n\n        if (data.length > 0) {\n            Address.functionDelegateCall(newImplementation, data);\n        } else {\n            _checkNonPayable();\n        }\n    }\n\n    /**\n     * @dev Storage slot with the admin of the contract.\n     * This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1.\n     */\n    // solhint-disable-next-line private-vars-leading-underscore\n    bytes32 internal constant ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\n\n    /**\n     * @dev Returns the current admin.\n     *\n     * TIP: To get this value clients can read directly from the storage slot shown below (specified by ERC-1967) using\n     * the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n     * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\n     */\n    function getAdmin() internal view returns (address) {\n        return StorageSlot.getAddressSlot(ADMIN_SLOT).value;\n    }\n\n    /**\n     * @dev Stores a new address in the ERC-1967 admin slot.\n     */\n    function _setAdmin(address newAdmin) private {\n        if (newAdmin == address(0)) {\n            revert ERC1967InvalidAdmin(address(0));\n        }\n        StorageSlot.getAddressSlot(ADMIN_SLOT).value = newAdmin;\n    }\n\n    /**\n     * @dev Changes the admin of the proxy.\n     *\n     * Emits an {IERC1967-AdminChanged} event.\n     */\n    function changeAdmin(address newAdmin) internal {\n        emit IERC1967.AdminChanged(getAdmin(), newAdmin);\n        _setAdmin(newAdmin);\n    }\n\n    /**\n     * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\n     * This is the keccak-256 hash of \"eip1967.proxy.beacon\" subtracted by 1.\n     */\n    // solhint-disable-next-line private-vars-leading-underscore\n    bytes32 internal constant BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\n\n    /**\n     * @dev Returns the current beacon.\n     */\n    function getBeacon() internal view returns (address) {\n        return StorageSlot.getAddressSlot(BEACON_SLOT).value;\n    }\n\n    /**\n     * @dev Stores a new beacon in the ERC-1967 beacon slot.\n     */\n    function _setBeacon(address newBeacon) private {\n        if (newBeacon.code.length == 0) {\n            revert ERC1967InvalidBeacon(newBeacon);\n        }\n\n        StorageSlot.getAddressSlot(BEACON_SLOT).value = newBeacon;\n\n        address beaconImplementation = IBeacon(newBeacon).implementation();\n        if (beaconImplementation.code.length == 0) {\n            revert ERC1967InvalidImplementation(beaconImplementation);\n        }\n    }\n\n    /**\n     * @dev Change the beacon and trigger a setup call if data is nonempty.\n     * This function is payable only if the setup call is performed, otherwise `msg.value` is rejected\n     * to avoid stuck value in the contract.\n     *\n     * Emits an {IERC1967-BeaconUpgraded} event.\n     *\n     * CAUTION: Invoking this function has no effect on an instance of {BeaconProxy} since v5, since\n     * it uses an immutable beacon without looking at the value of the ERC-1967 beacon slot for\n     * efficiency.\n     */\n    function upgradeBeaconToAndCall(address newBeacon, bytes memory data) internal {\n        _setBeacon(newBeacon);\n        emit IERC1967.BeaconUpgraded(newBeacon);\n\n        if (data.length > 0) {\n            Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\n        } else {\n            _checkNonPayable();\n        }\n    }\n\n    /**\n     * @dev Reverts if `msg.value` is not zero. It can be used to avoid `msg.value` stuck in the contract\n     * if an upgrade doesn't perform an initialization call.\n     */\n    function _checkNonPayable() private {\n        if (msg.value > 0) {\n            revert ERC1967NonPayable();\n        }\n    }\n}\n"
      },
      "@openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (token/ERC1155/extensions/IERC1155MetadataURI.sol)\n\npragma solidity >=0.6.2;\n\nimport {IERC1155} from \"../IERC1155.sol\";\n\n/**\n * @dev Interface of the optional ERC1155MetadataExtension interface, as defined\n * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[ERC].\n */\ninterface IERC1155MetadataURI is IERC1155 {\n    /**\n     * @dev Returns the URI for token type `id`.\n     *\n     * If the `\\{id\\}` substring is present in the URI, it must be replaced by\n     * clients with the actual token type ID.\n     */\n    function uri(uint256 id) external view returns (string memory);\n}\n"
      },
      "@openzeppelin/contracts/token/ERC1155/IERC1155.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (token/ERC1155/IERC1155.sol)\n\npragma solidity >=0.6.2;\n\nimport {IERC165} from \"../../utils/introspection/IERC165.sol\";\n\n/**\n * @dev Required interface of an ERC-1155 compliant contract, as defined in the\n * https://eips.ethereum.org/EIPS/eip-1155[ERC].\n */\ninterface IERC1155 is IERC165 {\n    /**\n     * @dev Emitted when `value` amount of tokens of type `id` are transferred from `from` to `to` by `operator`.\n     */\n    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\n\n    /**\n     * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\n     * transfers.\n     */\n    event TransferBatch(\n        address indexed operator,\n        address indexed from,\n        address indexed to,\n        uint256[] ids,\n        uint256[] values\n    );\n\n    /**\n     * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\n     * `approved`.\n     */\n    event ApprovalForAll(address indexed account, address indexed operator, bool approved);\n\n    /**\n     * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\n     *\n     * If an {URI} event was emitted for `id`, the standard\n     * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\n     * returned by {IERC1155MetadataURI-uri}.\n     */\n    event URI(string value, uint256 indexed id);\n\n    /**\n     * @dev Returns the value of tokens of token type `id` owned by `account`.\n     */\n    function balanceOf(address account, uint256 id) external view returns (uint256);\n\n    /**\n     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\n     *\n     * Requirements:\n     *\n     * - `accounts` and `ids` must have the same length.\n     */\n    function balanceOfBatch(\n        address[] calldata accounts,\n        uint256[] calldata ids\n    ) external view returns (uint256[] memory);\n\n    /**\n     * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\n     *\n     * Emits an {ApprovalForAll} event.\n     *\n     * Requirements:\n     *\n     * - `operator` cannot be the zero address.\n     */\n    function setApprovalForAll(address operator, bool approved) external;\n\n    /**\n     * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\n     *\n     * See {setApprovalForAll}.\n     */\n    function isApprovedForAll(address account, address operator) external view returns (bool);\n\n    /**\n     * @dev Transfers a `value` amount of tokens of type `id` from `from` to `to`.\n     *\n     * WARNING: This function can potentially allow a reentrancy attack when transferring tokens\n     * to an untrusted contract, when invoking {IERC1155Receiver-onERC1155Received} on the receiver.\n     * Ensure to follow the checks-effects-interactions pattern and consider employing\n     * reentrancy guards when interacting with untrusted contracts.\n     *\n     * Emits a {TransferSingle} event.\n     *\n     * Requirements:\n     *\n     * - `to` cannot be the zero address.\n     * - If the caller is not `from`, it must have been approved to spend ``from``'s tokens via {setApprovalForAll}.\n     * - `from` must have a balance of tokens of type `id` of at least `value` amount.\n     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\n     * acceptance magic value.\n     */\n    function safeTransferFrom(address from, address to, uint256 id, uint256 value, bytes calldata data) external;\n\n    /**\n     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\n     *\n     * WARNING: This function can potentially allow a reentrancy attack when transferring tokens\n     * to an untrusted contract, when invoking {IERC1155Receiver-onERC1155BatchReceived} on the receiver.\n     * Ensure to follow the checks-effects-interactions pattern and consider employing\n     * reentrancy guards when interacting with untrusted contracts.\n     *\n     * Emits either a {TransferSingle} or a {TransferBatch} event, depending on the length of the array arguments.\n     *\n     * Requirements:\n     *\n     * - `ids` and `values` must have the same length.\n     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\n     * acceptance magic value.\n     */\n    function safeBatchTransferFrom(\n        address from,\n        address to,\n        uint256[] calldata ids,\n        uint256[] calldata values,\n        bytes calldata data\n    ) external;\n}\n"
      },
      "@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (token/ERC1155/IERC1155Receiver.sol)\n\npragma solidity >=0.6.2;\n\nimport {IERC165} from \"../../utils/introspection/IERC165.sol\";\n\n/**\n * @dev Interface that must be implemented by smart contracts in order to receive\n * ERC-1155 token transfers.\n */\ninterface IERC1155Receiver is IERC165 {\n    /**\n     * @dev Handles the receipt of a single ERC-1155 token type. This function is\n     * called at the end of a `safeTransferFrom` after the balance has been updated.\n     *\n     * NOTE: To accept the transfer, this must return\n     * `bytes4(keccak256(\"onERC1155Received(address,address,uint256,uint256,bytes)\"))`\n     * (i.e. 0xf23a6e61, or its own function selector).\n     *\n     * @param operator The address which initiated the transfer (i.e. msg.sender)\n     * @param from The address which previously owned the token\n     * @param id The ID of the token being transferred\n     * @param value The amount of tokens being transferred\n     * @param data Additional data with no specified format\n     * @return `bytes4(keccak256(\"onERC1155Received(address,address,uint256,uint256,bytes)\"))` if transfer is allowed\n     */\n    function onERC1155Received(\n        address operator,\n        address from,\n        uint256 id,\n        uint256 value,\n        bytes calldata data\n    ) external returns (bytes4);\n\n    /**\n     * @dev Handles the receipt of a multiple ERC-1155 token types. This function\n     * is called at the end of a `safeBatchTransferFrom` after the balances have\n     * been updated.\n     *\n     * NOTE: To accept the transfer(s), this must return\n     * `bytes4(keccak256(\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\"))`\n     * (i.e. 0xbc197c81, or its own function selector).\n     *\n     * @param operator The address which initiated the batch transfer (i.e. msg.sender)\n     * @param from The address which previously owned the token\n     * @param ids An array containing ids of each token being transferred (order and length must match values array)\n     * @param values An array containing amounts of each token being transferred (order and length must match ids array)\n     * @param data Additional data with no specified format\n     * @return `bytes4(keccak256(\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\"))` if transfer is allowed\n     */\n    function onERC1155BatchReceived(\n        address operator,\n        address from,\n        uint256[] calldata ids,\n        uint256[] calldata values,\n        bytes calldata data\n    ) external returns (bytes4);\n}\n"
      },
      "@openzeppelin/contracts/token/ERC1155/utils/ERC1155Utils.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (token/ERC1155/utils/ERC1155Utils.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC1155Receiver} from \"../IERC1155Receiver.sol\";\nimport {IERC1155Errors} from \"../../../interfaces/draft-IERC6093.sol\";\n\n/**\n * @dev Library that provide common ERC-1155 utility functions.\n *\n * See https://eips.ethereum.org/EIPS/eip-1155[ERC-1155].\n *\n * _Available since v5.1._\n */\nlibrary ERC1155Utils {\n    /**\n     * @dev Performs an acceptance check for the provided `operator` by calling {IERC1155Receiver-onERC1155Received}\n     * on the `to` address. The `operator` is generally the address that initiated the token transfer (i.e. `msg.sender`).\n     *\n     * The acceptance call is not executed and treated as a no-op if the target address doesn't contain code (i.e. an EOA).\n     * Otherwise, the recipient must implement {IERC1155Receiver-onERC1155Received} and return the acceptance magic value to accept\n     * the transfer.\n     */\n    function checkOnERC1155Received(\n        address operator,\n        address from,\n        address to,\n        uint256 id,\n        uint256 value,\n        bytes memory data\n    ) internal {\n        if (to.code.length > 0) {\n            try IERC1155Receiver(to).onERC1155Received(operator, from, id, value, data) returns (bytes4 response) {\n                if (response != IERC1155Receiver.onERC1155Received.selector) {\n                    // Tokens rejected\n                    revert IERC1155Errors.ERC1155InvalidReceiver(to);\n                }\n            } catch (bytes memory reason) {\n                if (reason.length == 0) {\n                    // non-IERC1155Receiver implementer\n                    revert IERC1155Errors.ERC1155InvalidReceiver(to);\n                } else {\n                    assembly (\"memory-safe\") {\n                        revert(add(reason, 0x20), mload(reason))\n                    }\n                }\n            }\n        }\n    }\n\n    /**\n     * @dev Performs a batch acceptance check for the provided `operator` by calling {IERC1155Receiver-onERC1155BatchReceived}\n     * on the `to` address. The `operator` is generally the address that initiated the token transfer (i.e. `msg.sender`).\n     *\n     * The acceptance call is not executed and treated as a no-op if the target address doesn't contain code (i.e. an EOA).\n     * Otherwise, the recipient must implement {IERC1155Receiver-onERC1155Received} and return the acceptance magic value to accept\n     * the transfer.\n     */\n    function checkOnERC1155BatchReceived(\n        address operator,\n        address from,\n        address to,\n        uint256[] memory ids,\n        uint256[] memory values,\n        bytes memory data\n    ) internal {\n        if (to.code.length > 0) {\n            try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, values, data) returns (\n                bytes4 response\n            ) {\n                if (response != IERC1155Receiver.onERC1155BatchReceived.selector) {\n                    // Tokens rejected\n                    revert IERC1155Errors.ERC1155InvalidReceiver(to);\n                }\n            } catch (bytes memory reason) {\n                if (reason.length == 0) {\n                    // non-IERC1155Receiver implementer\n                    revert IERC1155Errors.ERC1155InvalidReceiver(to);\n                } else {\n                    assembly (\"memory-safe\") {\n                        revert(add(reason, 0x20), mload(reason))\n                    }\n                }\n            }\n        }\n    }\n}\n"
      },
      "@openzeppelin/contracts/utils/Address.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (utils/Address.sol)\n\npragma solidity ^0.8.20;\n\nimport {Errors} from \"./Errors.sol\";\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary Address {\n    /**\n     * @dev There's no code at `target` (it is not a contract).\n     */\n    error AddressEmptyCode(address target);\n\n    /**\n     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n     * `recipient`, forwarding all available gas and reverting on errors.\n     *\n     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n     * of certain opcodes, possibly making contracts go over the 2300 gas limit\n     * imposed by `transfer`, making them unable to receive funds via\n     * `transfer`. {sendValue} removes this limitation.\n     *\n     * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n     *\n     * IMPORTANT: because control is transferred to `recipient`, care must be\n     * taken to not create reentrancy vulnerabilities. Consider using\n     * {ReentrancyGuard} or the\n     * https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n     */\n    function sendValue(address payable recipient, uint256 amount) internal {\n        if (address(this).balance < amount) {\n            revert Errors.InsufficientBalance(address(this).balance, amount);\n        }\n\n        (bool success, bytes memory returndata) = recipient.call{value: amount}(\"\");\n        if (!success) {\n            _revert(returndata);\n        }\n    }\n\n    /**\n     * @dev Performs a Solidity function call using a low level `call`. A\n     * plain `call` is an unsafe replacement for a function call: use this\n     * function instead.\n     *\n     * If `target` reverts with a revert reason or custom error, it is bubbled\n     * up by this function (like regular Solidity function calls). However, if\n     * the call reverted with no returned reason, this function reverts with a\n     * {Errors.FailedCall} error.\n     *\n     * Returns the raw returned data. To convert to the expected return value,\n     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n     *\n     * Requirements:\n     *\n     * - `target` must be a contract.\n     * - calling `target` with `data` must not revert.\n     */\n    function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n        return functionCallWithValue(target, data, 0);\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n     * but also transferring `value` wei to `target`.\n     *\n     * Requirements:\n     *\n     * - the calling contract must have an ETH balance of at least `value`.\n     * - the called Solidity function must be `payable`.\n     */\n    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\n        if (address(this).balance < value) {\n            revert Errors.InsufficientBalance(address(this).balance, value);\n        }\n        (bool success, bytes memory returndata) = target.call{value: value}(data);\n        return verifyCallResultFromTarget(target, success, returndata);\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n     * but performing a static call.\n     */\n    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n        (bool success, bytes memory returndata) = target.staticcall(data);\n        return verifyCallResultFromTarget(target, success, returndata);\n    }\n\n    /**\n     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n     * but performing a delegate call.\n     */\n    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n        (bool success, bytes memory returndata) = target.delegatecall(data);\n        return verifyCallResultFromTarget(target, success, returndata);\n    }\n\n    /**\n     * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target\n     * was not a contract or bubbling up the revert reason (falling back to {Errors.FailedCall}) in case\n     * of an unsuccessful call.\n     */\n    function verifyCallResultFromTarget(\n        address target,\n        bool success,\n        bytes memory returndata\n    ) internal view returns (bytes memory) {\n        if (!success) {\n            _revert(returndata);\n        } else {\n            // only check if target is a contract if the call was successful and the return data is empty\n            // otherwise we already know that it was a contract\n            if (returndata.length == 0 && target.code.length == 0) {\n                revert AddressEmptyCode(target);\n            }\n            return returndata;\n        }\n    }\n\n    /**\n     * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the\n     * revert reason or with a default {Errors.FailedCall} error.\n     */\n    function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {\n        if (!success) {\n            _revert(returndata);\n        } else {\n            return returndata;\n        }\n    }\n\n    /**\n     * @dev Reverts with returndata if present. Otherwise reverts with {Errors.FailedCall}.\n     */\n    function _revert(bytes memory returndata) private pure {\n        // Look for revert reason and bubble it up if present\n        if (returndata.length > 0) {\n            // The easiest way to bubble the revert reason is using memory via assembly\n            assembly (\"memory-safe\") {\n                revert(add(returndata, 0x20), mload(returndata))\n            }\n        } else {\n            revert Errors.FailedCall();\n        }\n    }\n}\n"
      },
      "@openzeppelin/contracts/utils/Arrays.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (utils/Arrays.sol)\n// This file was procedurally generated from scripts/generate/templates/Arrays.js.\n\npragma solidity ^0.8.20;\n\nimport {Comparators} from \"./Comparators.sol\";\nimport {SlotDerivation} from \"./SlotDerivation.sol\";\nimport {StorageSlot} from \"./StorageSlot.sol\";\nimport {Math} from \"./math/Math.sol\";\n\n/**\n * @dev Collection of functions related to array types.\n */\nlibrary Arrays {\n    using SlotDerivation for bytes32;\n    using StorageSlot for bytes32;\n\n    /**\n     * @dev Sort an array of uint256 (in memory) following the provided comparator function.\n     *\n     * This function does the sorting \"in place\", meaning that it overrides the input. The object is returned for\n     * convenience, but that returned value can be discarded safely if the caller has a memory pointer to the array.\n     *\n     * NOTE: this function's cost is `O(n · log(n))` in average and `O(n²)` in the worst case, with n the length of the\n     * array. Using it in view functions that are executed through `eth_call` is safe, but one should be very careful\n     * when executing this as part of a transaction. If the array being sorted is too large, the sort operation may\n     * consume more gas than is available in a block, leading to potential DoS.\n     *\n     * IMPORTANT: Consider memory side-effects when using custom comparator functions that access memory in an unsafe way.\n     */\n    function sort(\n        uint256[] memory array,\n        function(uint256, uint256) pure returns (bool) comp\n    ) internal pure returns (uint256[] memory) {\n        _quickSort(_begin(array), _end(array), comp);\n        return array;\n    }\n\n    /**\n     * @dev Variant of {sort} that sorts an array of uint256 in increasing order.\n     */\n    function sort(uint256[] memory array) internal pure returns (uint256[] memory) {\n        sort(array, Comparators.lt);\n        return array;\n    }\n\n    /**\n     * @dev Sort an array of address (in memory) following the provided comparator function.\n     *\n     * This function does the sorting \"in place\", meaning that it overrides the input. The object is returned for\n     * convenience, but that returned value can be discarded safely if the caller has a memory pointer to the array.\n     *\n     * NOTE: this function's cost is `O(n · log(n))` in average and `O(n²)` in the worst case, with n the length of the\n     * array. Using it in view functions that are executed through `eth_call` is safe, but one should be very careful\n     * when executing this as part of a transaction. If the array being sorted is too large, the sort operation may\n     * consume more gas than is available in a block, leading to potential DoS.\n     *\n     * IMPORTANT: Consider memory side-effects when using custom comparator functions that access memory in an unsafe way.\n     */\n    function sort(\n        address[] memory array,\n        function(address, address) pure returns (bool) comp\n    ) internal pure returns (address[] memory) {\n        sort(_castToUint256Array(array), _castToUint256Comp(comp));\n        return array;\n    }\n\n    /**\n     * @dev Variant of {sort} that sorts an array of address in increasing order.\n     */\n    function sort(address[] memory array) internal pure returns (address[] memory) {\n        sort(_castToUint256Array(array), Comparators.lt);\n        return array;\n    }\n\n    /**\n     * @dev Sort an array of bytes32 (in memory) following the provided comparator function.\n     *\n     * This function does the sorting \"in place\", meaning that it overrides the input. The object is returned for\n     * convenience, but that returned value can be discarded safely if the caller has a memory pointer to the array.\n     *\n     * NOTE: this function's cost is `O(n · log(n))` in average and `O(n²)` in the worst case, with n the length of the\n     * array. Using it in view functions that are executed through `eth_call` is safe, but one should be very careful\n     * when executing this as part of a transaction. If the array being sorted is too large, the sort operation may\n     * consume more gas than is available in a block, leading to potential DoS.\n     *\n     * IMPORTANT: Consider memory side-effects when using custom comparator functions that access memory in an unsafe way.\n     */\n    function sort(\n        bytes32[] memory array,\n        function(bytes32, bytes32) pure returns (bool) comp\n    ) internal pure returns (bytes32[] memory) {\n        sort(_castToUint256Array(array), _castToUint256Comp(comp));\n        return array;\n    }\n\n    /**\n     * @dev Variant of {sort} that sorts an array of bytes32 in increasing order.\n     */\n    function sort(bytes32[] memory array) internal pure returns (bytes32[] memory) {\n        sort(_castToUint256Array(array), Comparators.lt);\n        return array;\n    }\n\n    /**\n     * @dev Performs a quick sort of a segment of memory. The segment sorted starts at `begin` (inclusive), and stops\n     * at end (exclusive). Sorting follows the `comp` comparator.\n     *\n     * Invariant: `begin <= end`. This is the case when initially called by {sort} and is preserved in subcalls.\n     *\n     * IMPORTANT: Memory locations between `begin` and `end` are not validated/zeroed. This function should\n     * be used only if the limits are within a memory array.\n     */\n    function _quickSort(uint256 begin, uint256 end, function(uint256, uint256) pure returns (bool) comp) private pure {\n        unchecked {\n            if (end - begin < 0x40) return;\n\n            // Use first element as pivot\n            uint256 pivot = _mload(begin);\n            // Position where the pivot should be at the end of the loop\n            uint256 pos = begin;\n\n            for (uint256 it = begin + 0x20; it < end; it += 0x20) {\n                if (comp(_mload(it), pivot)) {\n                    // If the value stored at the iterator's position comes before the pivot, we increment the\n                    // position of the pivot and move the value there.\n                    pos += 0x20;\n                    _swap(pos, it);\n                }\n            }\n\n            _swap(begin, pos); // Swap pivot into place\n            _quickSort(begin, pos, comp); // Sort the left side of the pivot\n            _quickSort(pos + 0x20, end, comp); // Sort the right side of the pivot\n        }\n    }\n\n    /**\n     * @dev Pointer to the memory location of the first element of `array`.\n     */\n    function _begin(uint256[] memory array) private pure returns (uint256 ptr) {\n        assembly (\"memory-safe\") {\n            ptr := add(array, 0x20)\n        }\n    }\n\n    /**\n     * @dev Pointer to the memory location of the first memory word (32bytes) after `array`. This is the memory word\n     * that comes just after the last element of the array.\n     */\n    function _end(uint256[] memory array) private pure returns (uint256 ptr) {\n        unchecked {\n            return _begin(array) + array.length * 0x20;\n        }\n    }\n\n    /**\n     * @dev Load memory word (as a uint256) at location `ptr`.\n     */\n    function _mload(uint256 ptr) private pure returns (uint256 value) {\n        assembly {\n            value := mload(ptr)\n        }\n    }\n\n    /**\n     * @dev Swaps the elements memory location `ptr1` and `ptr2`.\n     */\n    function _swap(uint256 ptr1, uint256 ptr2) private pure {\n        assembly {\n            let value1 := mload(ptr1)\n            let value2 := mload(ptr2)\n            mstore(ptr1, value2)\n            mstore(ptr2, value1)\n        }\n    }\n\n    /// @dev Helper: low level cast address memory array to uint256 memory array\n    function _castToUint256Array(address[] memory input) private pure returns (uint256[] memory output) {\n        assembly {\n            output := input\n        }\n    }\n\n    /// @dev Helper: low level cast bytes32 memory array to uint256 memory array\n    function _castToUint256Array(bytes32[] memory input) private pure returns (uint256[] memory output) {\n        assembly {\n            output := input\n        }\n    }\n\n    /// @dev Helper: low level cast address comp function to uint256 comp function\n    function _castToUint256Comp(\n        function(address, address) pure returns (bool) input\n    ) private pure returns (function(uint256, uint256) pure returns (bool) output) {\n        assembly {\n            output := input\n        }\n    }\n\n    /// @dev Helper: low level cast bytes32 comp function to uint256 comp function\n    function _castToUint256Comp(\n        function(bytes32, bytes32) pure returns (bool) input\n    ) private pure returns (function(uint256, uint256) pure returns (bool) output) {\n        assembly {\n            output := input\n        }\n    }\n\n    /**\n     * @dev Searches a sorted `array` and returns the first index that contains\n     * a value greater or equal to `element`. If no such index exists (i.e. all\n     * values in the array are strictly less than `element`), the array length is\n     * returned. Time complexity O(log n).\n     *\n     * NOTE: The `array` is expected to be sorted in ascending order, and to\n     * contain no repeated elements.\n     *\n     * IMPORTANT: Deprecated. This implementation behaves as {lowerBound} but lacks\n     * support for repeated elements in the array. The {lowerBound} function should\n     * be used instead.\n     */\n    function findUpperBound(uint256[] storage array, uint256 element) internal view returns (uint256) {\n        uint256 low = 0;\n        uint256 high = array.length;\n\n        if (high == 0) {\n            return 0;\n        }\n\n        while (low < high) {\n            uint256 mid = Math.average(low, high);\n\n            // Note that mid will always be strictly less than high (i.e. it will be a valid array index)\n            // because Math.average rounds towards zero (it does integer division with truncation).\n            if (unsafeAccess(array, mid).value > element) {\n                high = mid;\n            } else {\n                low = mid + 1;\n            }\n        }\n\n        // At this point `low` is the exclusive upper bound. We will return the inclusive upper bound.\n        if (low > 0 && unsafeAccess(array, low - 1).value == element) {\n            return low - 1;\n        } else {\n            return low;\n        }\n    }\n\n    /**\n     * @dev Searches an `array` sorted in ascending order and returns the first\n     * index that contains a value greater or equal than `element`. If no such index\n     * exists (i.e. all values in the array are strictly less than `element`), the array\n     * length is returned. Time complexity O(log n).\n     *\n     * See C++'s https://en.cppreference.com/w/cpp/algorithm/lower_bound[lower_bound].\n     */\n    function lowerBound(uint256[] storage array, uint256 element) internal view returns (uint256) {\n        uint256 low = 0;\n        uint256 high = array.length;\n\n        if (high == 0) {\n            return 0;\n        }\n\n        while (low < high) {\n            uint256 mid = Math.average(low, high);\n\n            // Note that mid will always be strictly less than high (i.e. it will be a valid array index)\n            // because Math.average rounds towards zero (it does integer division with truncation).\n            if (unsafeAccess(array, mid).value < element) {\n                // this cannot overflow because mid < high\n                unchecked {\n                    low = mid + 1;\n                }\n            } else {\n                high = mid;\n            }\n        }\n\n        return low;\n    }\n\n    /**\n     * @dev Searches an `array` sorted in ascending order and returns the first\n     * index that contains a value strictly greater than `element`. If no such index\n     * exists (i.e. all values in the array are strictly less than `element`), the array\n     * length is returned. Time complexity O(log n).\n     *\n     * See C++'s https://en.cppreference.com/w/cpp/algorithm/upper_bound[upper_bound].\n     */\n    function upperBound(uint256[] storage array, uint256 element) internal view returns (uint256) {\n        uint256 low = 0;\n        uint256 high = array.length;\n\n        if (high == 0) {\n            return 0;\n        }\n\n        while (low < high) {\n            uint256 mid = Math.average(low, high);\n\n            // Note that mid will always be strictly less than high (i.e. it will be a valid array index)\n            // because Math.average rounds towards zero (it does integer division with truncation).\n            if (unsafeAccess(array, mid).value > element) {\n                high = mid;\n            } else {\n                // this cannot overflow because mid < high\n                unchecked {\n                    low = mid + 1;\n                }\n            }\n        }\n\n        return low;\n    }\n\n    /**\n     * @dev Same as {lowerBound}, but with an array in memory.\n     */\n    function lowerBoundMemory(uint256[] memory array, uint256 element) internal pure returns (uint256) {\n        uint256 low = 0;\n        uint256 high = array.length;\n\n        if (high == 0) {\n            return 0;\n        }\n\n        while (low < high) {\n            uint256 mid = Math.average(low, high);\n\n            // Note that mid will always be strictly less than high (i.e. it will be a valid array index)\n            // because Math.average rounds towards zero (it does integer division with truncation).\n            if (unsafeMemoryAccess(array, mid) < element) {\n                // this cannot overflow because mid < high\n                unchecked {\n                    low = mid + 1;\n                }\n            } else {\n                high = mid;\n            }\n        }\n\n        return low;\n    }\n\n    /**\n     * @dev Same as {upperBound}, but with an array in memory.\n     */\n    function upperBoundMemory(uint256[] memory array, uint256 element) internal pure returns (uint256) {\n        uint256 low = 0;\n        uint256 high = array.length;\n\n        if (high == 0) {\n            return 0;\n        }\n\n        while (low < high) {\n            uint256 mid = Math.average(low, high);\n\n            // Note that mid will always be strictly less than high (i.e. it will be a valid array index)\n            // because Math.average rounds towards zero (it does integer division with truncation).\n            if (unsafeMemoryAccess(array, mid) > element) {\n                high = mid;\n            } else {\n                // this cannot overflow because mid < high\n                unchecked {\n                    low = mid + 1;\n                }\n            }\n        }\n\n        return low;\n    }\n\n    /**\n     * @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n     *\n     * WARNING: Only use if you are certain `pos` is lower than the array length.\n     */\n    function unsafeAccess(address[] storage arr, uint256 pos) internal pure returns (StorageSlot.AddressSlot storage) {\n        bytes32 slot;\n        assembly (\"memory-safe\") {\n            slot := arr.slot\n        }\n        return slot.deriveArray().offset(pos).getAddressSlot();\n    }\n\n    /**\n     * @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n     *\n     * WARNING: Only use if you are certain `pos` is lower than the array length.\n     */\n    function unsafeAccess(bytes32[] storage arr, uint256 pos) internal pure returns (StorageSlot.Bytes32Slot storage) {\n        bytes32 slot;\n        assembly (\"memory-safe\") {\n            slot := arr.slot\n        }\n        return slot.deriveArray().offset(pos).getBytes32Slot();\n    }\n\n    /**\n     * @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n     *\n     * WARNING: Only use if you are certain `pos` is lower than the array length.\n     */\n    function unsafeAccess(uint256[] storage arr, uint256 pos) internal pure returns (StorageSlot.Uint256Slot storage) {\n        bytes32 slot;\n        assembly (\"memory-safe\") {\n            slot := arr.slot\n        }\n        return slot.deriveArray().offset(pos).getUint256Slot();\n    }\n\n    /**\n     * @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n     *\n     * WARNING: Only use if you are certain `pos` is lower than the array length.\n     */\n    function unsafeAccess(bytes[] storage arr, uint256 pos) internal pure returns (StorageSlot.BytesSlot storage) {\n        bytes32 slot;\n        assembly (\"memory-safe\") {\n            slot := arr.slot\n        }\n        return slot.deriveArray().offset(pos).getBytesSlot();\n    }\n\n    /**\n     * @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n     *\n     * WARNING: Only use if you are certain `pos` is lower than the array length.\n     */\n    function unsafeAccess(string[] storage arr, uint256 pos) internal pure returns (StorageSlot.StringSlot storage) {\n        bytes32 slot;\n        assembly (\"memory-safe\") {\n            slot := arr.slot\n        }\n        return slot.deriveArray().offset(pos).getStringSlot();\n    }\n\n    /**\n     * @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n     *\n     * WARNING: Only use if you are certain `pos` is lower than the array length.\n     */\n    function unsafeMemoryAccess(address[] memory arr, uint256 pos) internal pure returns (address res) {\n        assembly {\n            res := mload(add(add(arr, 0x20), mul(pos, 0x20)))\n        }\n    }\n\n    /**\n     * @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n     *\n     * WARNING: Only use if you are certain `pos` is lower than the array length.\n     */\n    function unsafeMemoryAccess(bytes32[] memory arr, uint256 pos) internal pure returns (bytes32 res) {\n        assembly {\n            res := mload(add(add(arr, 0x20), mul(pos, 0x20)))\n        }\n    }\n\n    /**\n     * @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n     *\n     * WARNING: Only use if you are certain `pos` is lower than the array length.\n     */\n    function unsafeMemoryAccess(uint256[] memory arr, uint256 pos) internal pure returns (uint256 res) {\n        assembly {\n            res := mload(add(add(arr, 0x20), mul(pos, 0x20)))\n        }\n    }\n\n    /**\n     * @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n     *\n     * WARNING: Only use if you are certain `pos` is lower than the array length.\n     */\n    function unsafeMemoryAccess(bytes[] memory arr, uint256 pos) internal pure returns (bytes memory res) {\n        assembly {\n            res := mload(add(add(arr, 0x20), mul(pos, 0x20)))\n        }\n    }\n\n    /**\n     * @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n     *\n     * WARNING: Only use if you are certain `pos` is lower than the array length.\n     */\n    function unsafeMemoryAccess(string[] memory arr, uint256 pos) internal pure returns (string memory res) {\n        assembly {\n            res := mload(add(add(arr, 0x20), mul(pos, 0x20)))\n        }\n    }\n\n    /**\n     * @dev Helper to set the length of a dynamic array. Directly writing to `.length` is forbidden.\n     *\n     * WARNING: this does not clear elements if length is reduced, of initialize elements if length is increased.\n     */\n    function unsafeSetLength(address[] storage array, uint256 len) internal {\n        assembly (\"memory-safe\") {\n            sstore(array.slot, len)\n        }\n    }\n\n    /**\n     * @dev Helper to set the length of a dynamic array. Directly writing to `.length` is forbidden.\n     *\n     * WARNING: this does not clear elements if length is reduced, of initialize elements if length is increased.\n     */\n    function unsafeSetLength(bytes32[] storage array, uint256 len) internal {\n        assembly (\"memory-safe\") {\n            sstore(array.slot, len)\n        }\n    }\n\n    /**\n     * @dev Helper to set the length of a dynamic array. Directly writing to `.length` is forbidden.\n     *\n     * WARNING: this does not clear elements if length is reduced, of initialize elements if length is increased.\n     */\n    function unsafeSetLength(uint256[] storage array, uint256 len) internal {\n        assembly (\"memory-safe\") {\n            sstore(array.slot, len)\n        }\n    }\n\n    /**\n     * @dev Helper to set the length of a dynamic array. Directly writing to `.length` is forbidden.\n     *\n     * WARNING: this does not clear elements if length is reduced, of initialize elements if length is increased.\n     */\n    function unsafeSetLength(bytes[] storage array, uint256 len) internal {\n        assembly (\"memory-safe\") {\n            sstore(array.slot, len)\n        }\n    }\n\n    /**\n     * @dev Helper to set the length of a dynamic array. Directly writing to `.length` is forbidden.\n     *\n     * WARNING: this does not clear elements if length is reduced, of initialize elements if length is increased.\n     */\n    function unsafeSetLength(string[] storage array, uint256 len) internal {\n        assembly (\"memory-safe\") {\n            sstore(array.slot, len)\n        }\n    }\n}\n"
      },
      "@openzeppelin/contracts/utils/Comparators.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Comparators.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Provides a set of functions to compare values.\n *\n * _Available since v5.1._\n */\nlibrary Comparators {\n    function lt(uint256 a, uint256 b) internal pure returns (bool) {\n        return a < b;\n    }\n\n    function gt(uint256 a, uint256 b) internal pure returns (bool) {\n        return a > b;\n    }\n}\n"
      },
      "@openzeppelin/contracts/utils/Errors.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Errors.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Collection of common custom errors used in multiple contracts\n *\n * IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library.\n * It is recommended to avoid relying on the error API for critical functionality.\n *\n * _Available since v5.1._\n */\nlibrary Errors {\n    /**\n     * @dev The ETH balance of the account is not enough to perform the operation.\n     */\n    error InsufficientBalance(uint256 balance, uint256 needed);\n\n    /**\n     * @dev A call to an address target failed. The target may have reverted.\n     */\n    error FailedCall();\n\n    /**\n     * @dev The deployment failed.\n     */\n    error FailedDeployment();\n\n    /**\n     * @dev A necessary precompile is missing.\n     */\n    error MissingPrecompile(address);\n}\n"
      },
      "@openzeppelin/contracts/utils/introspection/IERC165.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (utils/introspection/IERC165.sol)\n\npragma solidity >=0.4.16;\n\n/**\n * @dev Interface of the ERC-165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[ERC].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165 {\n    /**\n     * @dev Returns true if this contract implements the interface defined by\n     * `interfaceId`. See the corresponding\n     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]\n     * to learn more about how these ids are created.\n     *\n     * This function call must use less than 30 000 gas.\n     */\n    function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n"
      },
      "@openzeppelin/contracts/utils/math/Math.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.3.0) (utils/math/Math.sol)\n\npragma solidity ^0.8.20;\n\nimport {Panic} from \"../Panic.sol\";\nimport {SafeCast} from \"./SafeCast.sol\";\n\n/**\n * @dev Standard math utilities missing in the Solidity language.\n */\nlibrary Math {\n    enum Rounding {\n        Floor, // Toward negative infinity\n        Ceil, // Toward positive infinity\n        Trunc, // Toward zero\n        Expand // Away from zero\n    }\n\n    /**\n     * @dev Return the 512-bit addition of two uint256.\n     *\n     * The result is stored in two 256 variables such that sum = high * 2²⁵⁶ + low.\n     */\n    function add512(uint256 a, uint256 b) internal pure returns (uint256 high, uint256 low) {\n        assembly (\"memory-safe\") {\n            low := add(a, b)\n            high := lt(low, a)\n        }\n    }\n\n    /**\n     * @dev Return the 512-bit multiplication of two uint256.\n     *\n     * The result is stored in two 256 variables such that product = high * 2²⁵⁶ + low.\n     */\n    function mul512(uint256 a, uint256 b) internal pure returns (uint256 high, uint256 low) {\n        // 512-bit multiply [high low] = x * y. Compute the product mod 2²⁵⁶ and mod 2²⁵⁶ - 1, then use\n        // the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\n        // variables such that product = high * 2²⁵⁶ + low.\n        assembly (\"memory-safe\") {\n            let mm := mulmod(a, b, not(0))\n            low := mul(a, b)\n            high := sub(sub(mm, low), lt(mm, low))\n        }\n    }\n\n    /**\n     * @dev Returns the addition of two unsigned integers, with a success flag (no overflow).\n     */\n    function tryAdd(uint256 a, uint256 b) internal pure returns (bool success, uint256 result) {\n        unchecked {\n            uint256 c = a + b;\n            success = c >= a;\n            result = c * SafeCast.toUint(success);\n        }\n    }\n\n    /**\n     * @dev Returns the subtraction of two unsigned integers, with a success flag (no overflow).\n     */\n    function trySub(uint256 a, uint256 b) internal pure returns (bool success, uint256 result) {\n        unchecked {\n            uint256 c = a - b;\n            success = c <= a;\n            result = c * SafeCast.toUint(success);\n        }\n    }\n\n    /**\n     * @dev Returns the multiplication of two unsigned integers, with a success flag (no overflow).\n     */\n    function tryMul(uint256 a, uint256 b) internal pure returns (bool success, uint256 result) {\n        unchecked {\n            uint256 c = a * b;\n            assembly (\"memory-safe\") {\n                // Only true when the multiplication doesn't overflow\n                // (c / a == b) || (a == 0)\n                success := or(eq(div(c, a), b), iszero(a))\n            }\n            // equivalent to: success ? c : 0\n            result = c * SafeCast.toUint(success);\n        }\n    }\n\n    /**\n     * @dev Returns the division of two unsigned integers, with a success flag (no division by zero).\n     */\n    function tryDiv(uint256 a, uint256 b) internal pure returns (bool success, uint256 result) {\n        unchecked {\n            success = b > 0;\n            assembly (\"memory-safe\") {\n                // The `DIV` opcode returns zero when the denominator is 0.\n                result := div(a, b)\n            }\n        }\n    }\n\n    /**\n     * @dev Returns the remainder of dividing two unsigned integers, with a success flag (no division by zero).\n     */\n    function tryMod(uint256 a, uint256 b) internal pure returns (bool success, uint256 result) {\n        unchecked {\n            success = b > 0;\n            assembly (\"memory-safe\") {\n                // The `MOD` opcode returns zero when the denominator is 0.\n                result := mod(a, b)\n            }\n        }\n    }\n\n    /**\n     * @dev Unsigned saturating addition, bounds to `2²⁵⁶ - 1` instead of overflowing.\n     */\n    function saturatingAdd(uint256 a, uint256 b) internal pure returns (uint256) {\n        (bool success, uint256 result) = tryAdd(a, b);\n        return ternary(success, result, type(uint256).max);\n    }\n\n    /**\n     * @dev Unsigned saturating subtraction, bounds to zero instead of overflowing.\n     */\n    function saturatingSub(uint256 a, uint256 b) internal pure returns (uint256) {\n        (, uint256 result) = trySub(a, b);\n        return result;\n    }\n\n    /**\n     * @dev Unsigned saturating multiplication, bounds to `2²⁵⁶ - 1` instead of overflowing.\n     */\n    function saturatingMul(uint256 a, uint256 b) internal pure returns (uint256) {\n        (bool success, uint256 result) = tryMul(a, b);\n        return ternary(success, result, type(uint256).max);\n    }\n\n    /**\n     * @dev Branchless ternary evaluation for `a ? b : c`. Gas costs are constant.\n     *\n     * IMPORTANT: This function may reduce bytecode size and consume less gas when used standalone.\n     * However, the compiler may optimize Solidity ternary operations (i.e. `a ? b : c`) to only compute\n     * one branch when needed, making this function more expensive.\n     */\n    function ternary(bool condition, uint256 a, uint256 b) internal pure returns (uint256) {\n        unchecked {\n            // branchless ternary works because:\n            // b ^ (a ^ b) == a\n            // b ^ 0 == b\n            return b ^ ((a ^ b) * SafeCast.toUint(condition));\n        }\n    }\n\n    /**\n     * @dev Returns the largest of two numbers.\n     */\n    function max(uint256 a, uint256 b) internal pure returns (uint256) {\n        return ternary(a > b, a, b);\n    }\n\n    /**\n     * @dev Returns the smallest of two numbers.\n     */\n    function min(uint256 a, uint256 b) internal pure returns (uint256) {\n        return ternary(a < b, a, b);\n    }\n\n    /**\n     * @dev Returns the average of two numbers. The result is rounded towards\n     * zero.\n     */\n    function average(uint256 a, uint256 b) internal pure returns (uint256) {\n        // (a + b) / 2 can overflow.\n        return (a & b) + (a ^ b) / 2;\n    }\n\n    /**\n     * @dev Returns the ceiling of the division of two numbers.\n     *\n     * This differs from standard division with `/` in that it rounds towards infinity instead\n     * of rounding towards zero.\n     */\n    function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\n        if (b == 0) {\n            // Guarantee the same behavior as in a regular Solidity division.\n            Panic.panic(Panic.DIVISION_BY_ZERO);\n        }\n\n        // The following calculation ensures accurate ceiling division without overflow.\n        // Since a is non-zero, (a - 1) / b will not overflow.\n        // The largest possible result occurs when (a - 1) / b is type(uint256).max,\n        // but the largest value we can obtain is type(uint256).max - 1, which happens\n        // when a = type(uint256).max and b = 1.\n        unchecked {\n            return SafeCast.toUint(a > 0) * ((a - 1) / b + 1);\n        }\n    }\n\n    /**\n     * @dev Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or\n     * denominator == 0.\n     *\n     * Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) with further edits by\n     * Uniswap Labs also under MIT license.\n     */\n    function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\n        unchecked {\n            (uint256 high, uint256 low) = mul512(x, y);\n\n            // Handle non-overflow cases, 256 by 256 division.\n            if (high == 0) {\n                // Solidity will revert if denominator == 0, unlike the div opcode on its own.\n                // The surrounding unchecked block does not change this fact.\n                // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\n                return low / denominator;\n            }\n\n            // Make sure the result is less than 2²⁵⁶. Also prevents denominator == 0.\n            if (denominator <= high) {\n                Panic.panic(ternary(denominator == 0, Panic.DIVISION_BY_ZERO, Panic.UNDER_OVERFLOW));\n            }\n\n            ///////////////////////////////////////////////\n            // 512 by 256 division.\n            ///////////////////////////////////////////////\n\n            // Make division exact by subtracting the remainder from [high low].\n            uint256 remainder;\n            assembly (\"memory-safe\") {\n                // Compute remainder using mulmod.\n                remainder := mulmod(x, y, denominator)\n\n                // Subtract 256 bit number from 512 bit number.\n                high := sub(high, gt(remainder, low))\n                low := sub(low, remainder)\n            }\n\n            // Factor powers of two out of denominator and compute largest power of two divisor of denominator.\n            // Always >= 1. See https://cs.stackexchange.com/q/138556/92363.\n\n            uint256 twos = denominator & (0 - denominator);\n            assembly (\"memory-safe\") {\n                // Divide denominator by twos.\n                denominator := div(denominator, twos)\n\n                // Divide [high low] by twos.\n                low := div(low, twos)\n\n                // Flip twos such that it is 2²⁵⁶ / twos. If twos is zero, then it becomes one.\n                twos := add(div(sub(0, twos), twos), 1)\n            }\n\n            // Shift in bits from high into low.\n            low |= high * twos;\n\n            // Invert denominator mod 2²⁵⁶. Now that denominator is an odd number, it has an inverse modulo 2²⁵⁶ such\n            // that denominator * inv ≡ 1 mod 2²⁵⁶. Compute the inverse by starting with a seed that is correct for\n            // four bits. That is, denominator * inv ≡ 1 mod 2⁴.\n            uint256 inverse = (3 * denominator) ^ 2;\n\n            // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also\n            // works in modular arithmetic, doubling the correct bits in each step.\n            inverse *= 2 - denominator * inverse; // inverse mod 2⁸\n            inverse *= 2 - denominator * inverse; // inverse mod 2¹⁶\n            inverse *= 2 - denominator * inverse; // inverse mod 2³²\n            inverse *= 2 - denominator * inverse; // inverse mod 2⁶⁴\n            inverse *= 2 - denominator * inverse; // inverse mod 2¹²⁸\n            inverse *= 2 - denominator * inverse; // inverse mod 2²⁵⁶\n\n            // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\n            // This will give us the correct result modulo 2²⁵⁶. Since the preconditions guarantee that the outcome is\n            // less than 2²⁵⁶, this is the final result. We don't need to compute the high bits of the result and high\n            // is no longer required.\n            result = low * inverse;\n            return result;\n        }\n    }\n\n    /**\n     * @dev Calculates x * y / denominator with full precision, following the selected rounding direction.\n     */\n    function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\n        return mulDiv(x, y, denominator) + SafeCast.toUint(unsignedRoundsUp(rounding) && mulmod(x, y, denominator) > 0);\n    }\n\n    /**\n     * @dev Calculates floor(x * y >> n) with full precision. Throws if result overflows a uint256.\n     */\n    function mulShr(uint256 x, uint256 y, uint8 n) internal pure returns (uint256 result) {\n        unchecked {\n            (uint256 high, uint256 low) = mul512(x, y);\n            if (high >= 1 << n) {\n                Panic.panic(Panic.UNDER_OVERFLOW);\n            }\n            return (high << (256 - n)) | (low >> n);\n        }\n    }\n\n    /**\n     * @dev Calculates x * y >> n with full precision, following the selected rounding direction.\n     */\n    function mulShr(uint256 x, uint256 y, uint8 n, Rounding rounding) internal pure returns (uint256) {\n        return mulShr(x, y, n) + SafeCast.toUint(unsignedRoundsUp(rounding) && mulmod(x, y, 1 << n) > 0);\n    }\n\n    /**\n     * @dev Calculate the modular multiplicative inverse of a number in Z/nZ.\n     *\n     * If n is a prime, then Z/nZ is a field. In that case all elements are inversible, except 0.\n     * If n is not a prime, then Z/nZ is not a field, and some elements might not be inversible.\n     *\n     * If the input value is not inversible, 0 is returned.\n     *\n     * NOTE: If you know for sure that n is (big) a prime, it may be cheaper to use Fermat's little theorem and get the\n     * inverse using `Math.modExp(a, n - 2, n)`. See {invModPrime}.\n     */\n    function invMod(uint256 a, uint256 n) internal pure returns (uint256) {\n        unchecked {\n            if (n == 0) return 0;\n\n            // The inverse modulo is calculated using the Extended Euclidean Algorithm (iterative version)\n            // Used to compute integers x and y such that: ax + ny = gcd(a, n).\n            // When the gcd is 1, then the inverse of a modulo n exists and it's x.\n            // ax + ny = 1\n            // ax = 1 + (-y)n\n            // ax ≡ 1 (mod n) # x is the inverse of a modulo n\n\n            // If the remainder is 0 the gcd is n right away.\n            uint256 remainder = a % n;\n            uint256 gcd = n;\n\n            // Therefore the initial coefficients are:\n            // ax + ny = gcd(a, n) = n\n            // 0a + 1n = n\n            int256 x = 0;\n            int256 y = 1;\n\n            while (remainder != 0) {\n                uint256 quotient = gcd / remainder;\n\n                (gcd, remainder) = (\n                    // The old remainder is the next gcd to try.\n                    remainder,\n                    // Compute the next remainder.\n                    // Can't overflow given that (a % gcd) * (gcd // (a % gcd)) <= gcd\n                    // where gcd is at most n (capped to type(uint256).max)\n                    gcd - remainder * quotient\n                );\n\n                (x, y) = (\n                    // Increment the coefficient of a.\n                    y,\n                    // Decrement the coefficient of n.\n                    // Can overflow, but the result is casted to uint256 so that the\n                    // next value of y is \"wrapped around\" to a value between 0 and n - 1.\n                    x - y * int256(quotient)\n                );\n            }\n\n            if (gcd != 1) return 0; // No inverse exists.\n            return ternary(x < 0, n - uint256(-x), uint256(x)); // Wrap the result if it's negative.\n        }\n    }\n\n    /**\n     * @dev Variant of {invMod}. More efficient, but only works if `p` is known to be a prime greater than `2`.\n     *\n     * From https://en.wikipedia.org/wiki/Fermat%27s_little_theorem[Fermat's little theorem], we know that if p is\n     * prime, then `a**(p-1) ≡ 1 mod p`. As a consequence, we have `a * a**(p-2) ≡ 1 mod p`, which means that\n     * `a**(p-2)` is the modular multiplicative inverse of a in Fp.\n     *\n     * NOTE: this function does NOT check that `p` is a prime greater than `2`.\n     */\n    function invModPrime(uint256 a, uint256 p) internal view returns (uint256) {\n        unchecked {\n            return Math.modExp(a, p - 2, p);\n        }\n    }\n\n    /**\n     * @dev Returns the modular exponentiation of the specified base, exponent and modulus (b ** e % m)\n     *\n     * Requirements:\n     * - modulus can't be zero\n     * - underlying staticcall to precompile must succeed\n     *\n     * IMPORTANT: The result is only valid if the underlying call succeeds. When using this function, make\n     * sure the chain you're using it on supports the precompiled contract for modular exponentiation\n     * at address 0x05 as specified in https://eips.ethereum.org/EIPS/eip-198[EIP-198]. Otherwise,\n     * the underlying function will succeed given the lack of a revert, but the result may be incorrectly\n     * interpreted as 0.\n     */\n    function modExp(uint256 b, uint256 e, uint256 m) internal view returns (uint256) {\n        (bool success, uint256 result) = tryModExp(b, e, m);\n        if (!success) {\n            Panic.panic(Panic.DIVISION_BY_ZERO);\n        }\n        return result;\n    }\n\n    /**\n     * @dev Returns the modular exponentiation of the specified base, exponent and modulus (b ** e % m).\n     * It includes a success flag indicating if the operation succeeded. Operation will be marked as failed if trying\n     * to operate modulo 0 or if the underlying precompile reverted.\n     *\n     * IMPORTANT: The result is only valid if the success flag is true. When using this function, make sure the chain\n     * you're using it on supports the precompiled contract for modular exponentiation at address 0x05 as specified in\n     * https://eips.ethereum.org/EIPS/eip-198[EIP-198]. Otherwise, the underlying function will succeed given the lack\n     * of a revert, but the result may be incorrectly interpreted as 0.\n     */\n    function tryModExp(uint256 b, uint256 e, uint256 m) internal view returns (bool success, uint256 result) {\n        if (m == 0) return (false, 0);\n        assembly (\"memory-safe\") {\n            let ptr := mload(0x40)\n            // | Offset    | Content    | Content (Hex)                                                      |\n            // |-----------|------------|--------------------------------------------------------------------|\n            // | 0x00:0x1f | size of b  | 0x0000000000000000000000000000000000000000000000000000000000000020 |\n            // | 0x20:0x3f | size of e  | 0x0000000000000000000000000000000000000000000000000000000000000020 |\n            // | 0x40:0x5f | size of m  | 0x0000000000000000000000000000000000000000000000000000000000000020 |\n            // | 0x60:0x7f | value of b | 0x<.............................................................b> |\n            // | 0x80:0x9f | value of e | 0x<.............................................................e> |\n            // | 0xa0:0xbf | value of m | 0x<.............................................................m> |\n            mstore(ptr, 0x20)\n            mstore(add(ptr, 0x20), 0x20)\n            mstore(add(ptr, 0x40), 0x20)\n            mstore(add(ptr, 0x60), b)\n            mstore(add(ptr, 0x80), e)\n            mstore(add(ptr, 0xa0), m)\n\n            // Given the result < m, it's guaranteed to fit in 32 bytes,\n            // so we can use the memory scratch space located at offset 0.\n            success := staticcall(gas(), 0x05, ptr, 0xc0, 0x00, 0x20)\n            result := mload(0x00)\n        }\n    }\n\n    /**\n     * @dev Variant of {modExp} that supports inputs of arbitrary length.\n     */\n    function modExp(bytes memory b, bytes memory e, bytes memory m) internal view returns (bytes memory) {\n        (bool success, bytes memory result) = tryModExp(b, e, m);\n        if (!success) {\n            Panic.panic(Panic.DIVISION_BY_ZERO);\n        }\n        return result;\n    }\n\n    /**\n     * @dev Variant of {tryModExp} that supports inputs of arbitrary length.\n     */\n    function tryModExp(\n        bytes memory b,\n        bytes memory e,\n        bytes memory m\n    ) internal view returns (bool success, bytes memory result) {\n        if (_zeroBytes(m)) return (false, new bytes(0));\n\n        uint256 mLen = m.length;\n\n        // Encode call args in result and move the free memory pointer\n        result = abi.encodePacked(b.length, e.length, mLen, b, e, m);\n\n        assembly (\"memory-safe\") {\n            let dataPtr := add(result, 0x20)\n            // Write result on top of args to avoid allocating extra memory.\n            success := staticcall(gas(), 0x05, dataPtr, mload(result), dataPtr, mLen)\n            // Overwrite the length.\n            // result.length > returndatasize() is guaranteed because returndatasize() == m.length\n            mstore(result, mLen)\n            // Set the memory pointer after the returned data.\n            mstore(0x40, add(dataPtr, mLen))\n        }\n    }\n\n    /**\n     * @dev Returns whether the provided byte array is zero.\n     */\n    function _zeroBytes(bytes memory byteArray) private pure returns (bool) {\n        for (uint256 i = 0; i < byteArray.length; ++i) {\n            if (byteArray[i] != 0) {\n                return false;\n            }\n        }\n        return true;\n    }\n\n    /**\n     * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded\n     * towards zero.\n     *\n     * This method is based on Newton's method for computing square roots; the algorithm is restricted to only\n     * using integer operations.\n     */\n    function sqrt(uint256 a) internal pure returns (uint256) {\n        unchecked {\n            // Take care of easy edge cases when a == 0 or a == 1\n            if (a <= 1) {\n                return a;\n            }\n\n            // In this function, we use Newton's method to get a root of `f(x) := x² - a`. It involves building a\n            // sequence x_n that converges toward sqrt(a). For each iteration x_n, we also define the error between\n            // the current value as `ε_n = | x_n - sqrt(a) |`.\n            //\n            // For our first estimation, we consider `e` the smallest power of 2 which is bigger than the square root\n            // of the target. (i.e. `2**(e-1) ≤ sqrt(a) < 2**e`). We know that `e ≤ 128` because `(2¹²⁸)² = 2²⁵⁶` is\n            // bigger than any uint256.\n            //\n            // By noticing that\n            // `2**(e-1) ≤ sqrt(a) < 2**e → (2**(e-1))² ≤ a < (2**e)² → 2**(2*e-2) ≤ a < 2**(2*e)`\n            // we can deduce that `e - 1` is `log2(a) / 2`. We can thus compute `x_n = 2**(e-1)` using a method similar\n            // to the msb function.\n            uint256 aa = a;\n            uint256 xn = 1;\n\n            if (aa >= (1 << 128)) {\n                aa >>= 128;\n                xn <<= 64;\n            }\n            if (aa >= (1 << 64)) {\n                aa >>= 64;\n                xn <<= 32;\n            }\n            if (aa >= (1 << 32)) {\n                aa >>= 32;\n                xn <<= 16;\n            }\n            if (aa >= (1 << 16)) {\n                aa >>= 16;\n                xn <<= 8;\n            }\n            if (aa >= (1 << 8)) {\n                aa >>= 8;\n                xn <<= 4;\n            }\n            if (aa >= (1 << 4)) {\n                aa >>= 4;\n                xn <<= 2;\n            }\n            if (aa >= (1 << 2)) {\n                xn <<= 1;\n            }\n\n            // We now have x_n such that `x_n = 2**(e-1) ≤ sqrt(a) < 2**e = 2 * x_n`. This implies ε_n ≤ 2**(e-1).\n            //\n            // We can refine our estimation by noticing that the middle of that interval minimizes the error.\n            // If we move x_n to equal 2**(e-1) + 2**(e-2), then we reduce the error to ε_n ≤ 2**(e-2).\n            // This is going to be our x_0 (and ε_0)\n            xn = (3 * xn) >> 1; // ε_0 := | x_0 - sqrt(a) | ≤ 2**(e-2)\n\n            // From here, Newton's method give us:\n            // x_{n+1} = (x_n + a / x_n) / 2\n            //\n            // One should note that:\n            // x_{n+1}² - a = ((x_n + a / x_n) / 2)² - a\n            //              = ((x_n² + a) / (2 * x_n))² - a\n            //              = (x_n⁴ + 2 * a * x_n² + a²) / (4 * x_n²) - a\n            //              = (x_n⁴ + 2 * a * x_n² + a² - 4 * a * x_n²) / (4 * x_n²)\n            //              = (x_n⁴ - 2 * a * x_n² + a²) / (4 * x_n²)\n            //              = (x_n² - a)² / (2 * x_n)²\n            //              = ((x_n² - a) / (2 * x_n))²\n            //              ≥ 0\n            // Which proves that for all n ≥ 1, sqrt(a) ≤ x_n\n            //\n            // This gives us the proof of quadratic convergence of the sequence:\n            // ε_{n+1} = | x_{n+1} - sqrt(a) |\n            //         = | (x_n + a / x_n) / 2 - sqrt(a) |\n            //         = | (x_n² + a - 2*x_n*sqrt(a)) / (2 * x_n) |\n            //         = | (x_n - sqrt(a))² / (2 * x_n) |\n            //         = | ε_n² / (2 * x_n) |\n            //         = ε_n² / | (2 * x_n) |\n            //\n            // For the first iteration, we have a special case where x_0 is known:\n            // ε_1 = ε_0² / | (2 * x_0) |\n            //     ≤ (2**(e-2))² / (2 * (2**(e-1) + 2**(e-2)))\n            //     ≤ 2**(2*e-4) / (3 * 2**(e-1))\n            //     ≤ 2**(e-3) / 3\n            //     ≤ 2**(e-3-log2(3))\n            //     ≤ 2**(e-4.5)\n            //\n            // For the following iterations, we use the fact that, 2**(e-1) ≤ sqrt(a) ≤ x_n:\n            // ε_{n+1} = ε_n² / | (2 * x_n) |\n            //         ≤ (2**(e-k))² / (2 * 2**(e-1))\n            //         ≤ 2**(2*e-2*k) / 2**e\n            //         ≤ 2**(e-2*k)\n            xn = (xn + a / xn) >> 1; // ε_1 := | x_1 - sqrt(a) | ≤ 2**(e-4.5)  -- special case, see above\n            xn = (xn + a / xn) >> 1; // ε_2 := | x_2 - sqrt(a) | ≤ 2**(e-9)    -- general case with k = 4.5\n            xn = (xn + a / xn) >> 1; // ε_3 := | x_3 - sqrt(a) | ≤ 2**(e-18)   -- general case with k = 9\n            xn = (xn + a / xn) >> 1; // ε_4 := | x_4 - sqrt(a) | ≤ 2**(e-36)   -- general case with k = 18\n            xn = (xn + a / xn) >> 1; // ε_5 := | x_5 - sqrt(a) | ≤ 2**(e-72)   -- general case with k = 36\n            xn = (xn + a / xn) >> 1; // ε_6 := | x_6 - sqrt(a) | ≤ 2**(e-144)  -- general case with k = 72\n\n            // Because e ≤ 128 (as discussed during the first estimation phase), we know have reached a precision\n            // ε_6 ≤ 2**(e-144) < 1. Given we're operating on integers, then we can ensure that xn is now either\n            // sqrt(a) or sqrt(a) + 1.\n            return xn - SafeCast.toUint(xn > a / xn);\n        }\n    }\n\n    /**\n     * @dev Calculates sqrt(a), following the selected rounding direction.\n     */\n    function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\n        unchecked {\n            uint256 result = sqrt(a);\n            return result + SafeCast.toUint(unsignedRoundsUp(rounding) && result * result < a);\n        }\n    }\n\n    /**\n     * @dev Return the log in base 2 of a positive value rounded towards zero.\n     * Returns 0 if given 0.\n     */\n    function log2(uint256 x) internal pure returns (uint256 r) {\n        // If value has upper 128 bits set, log2 result is at least 128\n        r = SafeCast.toUint(x > 0xffffffffffffffffffffffffffffffff) << 7;\n        // If upper 64 bits of 128-bit half set, add 64 to result\n        r |= SafeCast.toUint((x >> r) > 0xffffffffffffffff) << 6;\n        // If upper 32 bits of 64-bit half set, add 32 to result\n        r |= SafeCast.toUint((x >> r) > 0xffffffff) << 5;\n        // If upper 16 bits of 32-bit half set, add 16 to result\n        r |= SafeCast.toUint((x >> r) > 0xffff) << 4;\n        // If upper 8 bits of 16-bit half set, add 8 to result\n        r |= SafeCast.toUint((x >> r) > 0xff) << 3;\n        // If upper 4 bits of 8-bit half set, add 4 to result\n        r |= SafeCast.toUint((x >> r) > 0xf) << 2;\n\n        // Shifts value right by the current result and use it as an index into this lookup table:\n        //\n        // | x (4 bits) |  index  | table[index] = MSB position |\n        // |------------|---------|-----------------------------|\n        // |    0000    |    0    |        table[0] = 0         |\n        // |    0001    |    1    |        table[1] = 0         |\n        // |    0010    |    2    |        table[2] = 1         |\n        // |    0011    |    3    |        table[3] = 1         |\n        // |    0100    |    4    |        table[4] = 2         |\n        // |    0101    |    5    |        table[5] = 2         |\n        // |    0110    |    6    |        table[6] = 2         |\n        // |    0111    |    7    |        table[7] = 2         |\n        // |    1000    |    8    |        table[8] = 3         |\n        // |    1001    |    9    |        table[9] = 3         |\n        // |    1010    |   10    |        table[10] = 3        |\n        // |    1011    |   11    |        table[11] = 3        |\n        // |    1100    |   12    |        table[12] = 3        |\n        // |    1101    |   13    |        table[13] = 3        |\n        // |    1110    |   14    |        table[14] = 3        |\n        // |    1111    |   15    |        table[15] = 3        |\n        //\n        // The lookup table is represented as a 32-byte value with the MSB positions for 0-15 in the last 16 bytes.\n        assembly (\"memory-safe\") {\n            r := or(r, byte(shr(r, x), 0x0000010102020202030303030303030300000000000000000000000000000000))\n        }\n    }\n\n    /**\n     * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\n     * Returns 0 if given 0.\n     */\n    function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\n        unchecked {\n            uint256 result = log2(value);\n            return result + SafeCast.toUint(unsignedRoundsUp(rounding) && 1 << result < value);\n        }\n    }\n\n    /**\n     * @dev Return the log in base 10 of a positive value rounded towards zero.\n     * Returns 0 if given 0.\n     */\n    function log10(uint256 value) internal pure returns (uint256) {\n        uint256 result = 0;\n        unchecked {\n            if (value >= 10 ** 64) {\n                value /= 10 ** 64;\n                result += 64;\n            }\n            if (value >= 10 ** 32) {\n                value /= 10 ** 32;\n                result += 32;\n            }\n            if (value >= 10 ** 16) {\n                value /= 10 ** 16;\n                result += 16;\n            }\n            if (value >= 10 ** 8) {\n                value /= 10 ** 8;\n                result += 8;\n            }\n            if (value >= 10 ** 4) {\n                value /= 10 ** 4;\n                result += 4;\n            }\n            if (value >= 10 ** 2) {\n                value /= 10 ** 2;\n                result += 2;\n            }\n            if (value >= 10 ** 1) {\n                result += 1;\n            }\n        }\n        return result;\n    }\n\n    /**\n     * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\n     * Returns 0 if given 0.\n     */\n    function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\n        unchecked {\n            uint256 result = log10(value);\n            return result + SafeCast.toUint(unsignedRoundsUp(rounding) && 10 ** result < value);\n        }\n    }\n\n    /**\n     * @dev Return the log in base 256 of a positive value rounded towards zero.\n     * Returns 0 if given 0.\n     *\n     * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\n     */\n    function log256(uint256 x) internal pure returns (uint256 r) {\n        // If value has upper 128 bits set, log2 result is at least 128\n        r = SafeCast.toUint(x > 0xffffffffffffffffffffffffffffffff) << 7;\n        // If upper 64 bits of 128-bit half set, add 64 to result\n        r |= SafeCast.toUint((x >> r) > 0xffffffffffffffff) << 6;\n        // If upper 32 bits of 64-bit half set, add 32 to result\n        r |= SafeCast.toUint((x >> r) > 0xffffffff) << 5;\n        // If upper 16 bits of 32-bit half set, add 16 to result\n        r |= SafeCast.toUint((x >> r) > 0xffff) << 4;\n        // Add 1 if upper 8 bits of 16-bit half set, and divide accumulated result by 8\n        return (r >> 3) | SafeCast.toUint((x >> r) > 0xff);\n    }\n\n    /**\n     * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\n     * Returns 0 if given 0.\n     */\n    function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\n        unchecked {\n            uint256 result = log256(value);\n            return result + SafeCast.toUint(unsignedRoundsUp(rounding) && 1 << (result << 3) < value);\n        }\n    }\n\n    /**\n     * @dev Returns whether a provided rounding mode is considered rounding up for unsigned integers.\n     */\n    function unsignedRoundsUp(Rounding rounding) internal pure returns (bool) {\n        return uint8(rounding) % 2 == 1;\n    }\n}\n"
      },
      "@openzeppelin/contracts/utils/math/SafeCast.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/math/SafeCast.sol)\n// This file was procedurally generated from scripts/generate/templates/SafeCast.js.\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Wrappers over Solidity's uintXX/intXX/bool casting operators with added overflow\n * checks.\n *\n * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can\n * easily result in undesired exploitation or bugs, since developers usually\n * assume that overflows raise errors. `SafeCast` restores this intuition by\n * reverting the transaction when such an operation overflows.\n *\n * Using this library instead of the unchecked operations eliminates an entire\n * class of bugs, so it's recommended to use it always.\n */\nlibrary SafeCast {\n    /**\n     * @dev Value doesn't fit in an uint of `bits` size.\n     */\n    error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value);\n\n    /**\n     * @dev An int value doesn't fit in an uint of `bits` size.\n     */\n    error SafeCastOverflowedIntToUint(int256 value);\n\n    /**\n     * @dev Value doesn't fit in an int of `bits` size.\n     */\n    error SafeCastOverflowedIntDowncast(uint8 bits, int256 value);\n\n    /**\n     * @dev An uint value doesn't fit in an int of `bits` size.\n     */\n    error SafeCastOverflowedUintToInt(uint256 value);\n\n    /**\n     * @dev Returns the downcasted uint248 from uint256, reverting on\n     * overflow (when the input is greater than largest uint248).\n     *\n     * Counterpart to Solidity's `uint248` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 248 bits\n     */\n    function toUint248(uint256 value) internal pure returns (uint248) {\n        if (value > type(uint248).max) {\n            revert SafeCastOverflowedUintDowncast(248, value);\n        }\n        return uint248(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint240 from uint256, reverting on\n     * overflow (when the input is greater than largest uint240).\n     *\n     * Counterpart to Solidity's `uint240` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 240 bits\n     */\n    function toUint240(uint256 value) internal pure returns (uint240) {\n        if (value > type(uint240).max) {\n            revert SafeCastOverflowedUintDowncast(240, value);\n        }\n        return uint240(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint232 from uint256, reverting on\n     * overflow (when the input is greater than largest uint232).\n     *\n     * Counterpart to Solidity's `uint232` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 232 bits\n     */\n    function toUint232(uint256 value) internal pure returns (uint232) {\n        if (value > type(uint232).max) {\n            revert SafeCastOverflowedUintDowncast(232, value);\n        }\n        return uint232(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint224 from uint256, reverting on\n     * overflow (when the input is greater than largest uint224).\n     *\n     * Counterpart to Solidity's `uint224` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 224 bits\n     */\n    function toUint224(uint256 value) internal pure returns (uint224) {\n        if (value > type(uint224).max) {\n            revert SafeCastOverflowedUintDowncast(224, value);\n        }\n        return uint224(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint216 from uint256, reverting on\n     * overflow (when the input is greater than largest uint216).\n     *\n     * Counterpart to Solidity's `uint216` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 216 bits\n     */\n    function toUint216(uint256 value) internal pure returns (uint216) {\n        if (value > type(uint216).max) {\n            revert SafeCastOverflowedUintDowncast(216, value);\n        }\n        return uint216(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint208 from uint256, reverting on\n     * overflow (when the input is greater than largest uint208).\n     *\n     * Counterpart to Solidity's `uint208` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 208 bits\n     */\n    function toUint208(uint256 value) internal pure returns (uint208) {\n        if (value > type(uint208).max) {\n            revert SafeCastOverflowedUintDowncast(208, value);\n        }\n        return uint208(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint200 from uint256, reverting on\n     * overflow (when the input is greater than largest uint200).\n     *\n     * Counterpart to Solidity's `uint200` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 200 bits\n     */\n    function toUint200(uint256 value) internal pure returns (uint200) {\n        if (value > type(uint200).max) {\n            revert SafeCastOverflowedUintDowncast(200, value);\n        }\n        return uint200(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint192 from uint256, reverting on\n     * overflow (when the input is greater than largest uint192).\n     *\n     * Counterpart to Solidity's `uint192` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 192 bits\n     */\n    function toUint192(uint256 value) internal pure returns (uint192) {\n        if (value > type(uint192).max) {\n            revert SafeCastOverflowedUintDowncast(192, value);\n        }\n        return uint192(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint184 from uint256, reverting on\n     * overflow (when the input is greater than largest uint184).\n     *\n     * Counterpart to Solidity's `uint184` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 184 bits\n     */\n    function toUint184(uint256 value) internal pure returns (uint184) {\n        if (value > type(uint184).max) {\n            revert SafeCastOverflowedUintDowncast(184, value);\n        }\n        return uint184(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint176 from uint256, reverting on\n     * overflow (when the input is greater than largest uint176).\n     *\n     * Counterpart to Solidity's `uint176` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 176 bits\n     */\n    function toUint176(uint256 value) internal pure returns (uint176) {\n        if (value > type(uint176).max) {\n            revert SafeCastOverflowedUintDowncast(176, value);\n        }\n        return uint176(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint168 from uint256, reverting on\n     * overflow (when the input is greater than largest uint168).\n     *\n     * Counterpart to Solidity's `uint168` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 168 bits\n     */\n    function toUint168(uint256 value) internal pure returns (uint168) {\n        if (value > type(uint168).max) {\n            revert SafeCastOverflowedUintDowncast(168, value);\n        }\n        return uint168(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint160 from uint256, reverting on\n     * overflow (when the input is greater than largest uint160).\n     *\n     * Counterpart to Solidity's `uint160` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 160 bits\n     */\n    function toUint160(uint256 value) internal pure returns (uint160) {\n        if (value > type(uint160).max) {\n            revert SafeCastOverflowedUintDowncast(160, value);\n        }\n        return uint160(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint152 from uint256, reverting on\n     * overflow (when the input is greater than largest uint152).\n     *\n     * Counterpart to Solidity's `uint152` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 152 bits\n     */\n    function toUint152(uint256 value) internal pure returns (uint152) {\n        if (value > type(uint152).max) {\n            revert SafeCastOverflowedUintDowncast(152, value);\n        }\n        return uint152(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint144 from uint256, reverting on\n     * overflow (when the input is greater than largest uint144).\n     *\n     * Counterpart to Solidity's `uint144` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 144 bits\n     */\n    function toUint144(uint256 value) internal pure returns (uint144) {\n        if (value > type(uint144).max) {\n            revert SafeCastOverflowedUintDowncast(144, value);\n        }\n        return uint144(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint136 from uint256, reverting on\n     * overflow (when the input is greater than largest uint136).\n     *\n     * Counterpart to Solidity's `uint136` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 136 bits\n     */\n    function toUint136(uint256 value) internal pure returns (uint136) {\n        if (value > type(uint136).max) {\n            revert SafeCastOverflowedUintDowncast(136, value);\n        }\n        return uint136(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint128 from uint256, reverting on\n     * overflow (when the input is greater than largest uint128).\n     *\n     * Counterpart to Solidity's `uint128` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 128 bits\n     */\n    function toUint128(uint256 value) internal pure returns (uint128) {\n        if (value > type(uint128).max) {\n            revert SafeCastOverflowedUintDowncast(128, value);\n        }\n        return uint128(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint120 from uint256, reverting on\n     * overflow (when the input is greater than largest uint120).\n     *\n     * Counterpart to Solidity's `uint120` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 120 bits\n     */\n    function toUint120(uint256 value) internal pure returns (uint120) {\n        if (value > type(uint120).max) {\n            revert SafeCastOverflowedUintDowncast(120, value);\n        }\n        return uint120(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint112 from uint256, reverting on\n     * overflow (when the input is greater than largest uint112).\n     *\n     * Counterpart to Solidity's `uint112` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 112 bits\n     */\n    function toUint112(uint256 value) internal pure returns (uint112) {\n        if (value > type(uint112).max) {\n            revert SafeCastOverflowedUintDowncast(112, value);\n        }\n        return uint112(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint104 from uint256, reverting on\n     * overflow (when the input is greater than largest uint104).\n     *\n     * Counterpart to Solidity's `uint104` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 104 bits\n     */\n    function toUint104(uint256 value) internal pure returns (uint104) {\n        if (value > type(uint104).max) {\n            revert SafeCastOverflowedUintDowncast(104, value);\n        }\n        return uint104(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint96 from uint256, reverting on\n     * overflow (when the input is greater than largest uint96).\n     *\n     * Counterpart to Solidity's `uint96` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 96 bits\n     */\n    function toUint96(uint256 value) internal pure returns (uint96) {\n        if (value > type(uint96).max) {\n            revert SafeCastOverflowedUintDowncast(96, value);\n        }\n        return uint96(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint88 from uint256, reverting on\n     * overflow (when the input is greater than largest uint88).\n     *\n     * Counterpart to Solidity's `uint88` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 88 bits\n     */\n    function toUint88(uint256 value) internal pure returns (uint88) {\n        if (value > type(uint88).max) {\n            revert SafeCastOverflowedUintDowncast(88, value);\n        }\n        return uint88(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint80 from uint256, reverting on\n     * overflow (when the input is greater than largest uint80).\n     *\n     * Counterpart to Solidity's `uint80` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 80 bits\n     */\n    function toUint80(uint256 value) internal pure returns (uint80) {\n        if (value > type(uint80).max) {\n            revert SafeCastOverflowedUintDowncast(80, value);\n        }\n        return uint80(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint72 from uint256, reverting on\n     * overflow (when the input is greater than largest uint72).\n     *\n     * Counterpart to Solidity's `uint72` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 72 bits\n     */\n    function toUint72(uint256 value) internal pure returns (uint72) {\n        if (value > type(uint72).max) {\n            revert SafeCastOverflowedUintDowncast(72, value);\n        }\n        return uint72(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint64 from uint256, reverting on\n     * overflow (when the input is greater than largest uint64).\n     *\n     * Counterpart to Solidity's `uint64` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 64 bits\n     */\n    function toUint64(uint256 value) internal pure returns (uint64) {\n        if (value > type(uint64).max) {\n            revert SafeCastOverflowedUintDowncast(64, value);\n        }\n        return uint64(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint56 from uint256, reverting on\n     * overflow (when the input is greater than largest uint56).\n     *\n     * Counterpart to Solidity's `uint56` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 56 bits\n     */\n    function toUint56(uint256 value) internal pure returns (uint56) {\n        if (value > type(uint56).max) {\n            revert SafeCastOverflowedUintDowncast(56, value);\n        }\n        return uint56(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint48 from uint256, reverting on\n     * overflow (when the input is greater than largest uint48).\n     *\n     * Counterpart to Solidity's `uint48` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 48 bits\n     */\n    function toUint48(uint256 value) internal pure returns (uint48) {\n        if (value > type(uint48).max) {\n            revert SafeCastOverflowedUintDowncast(48, value);\n        }\n        return uint48(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint40 from uint256, reverting on\n     * overflow (when the input is greater than largest uint40).\n     *\n     * Counterpart to Solidity's `uint40` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 40 bits\n     */\n    function toUint40(uint256 value) internal pure returns (uint40) {\n        if (value > type(uint40).max) {\n            revert SafeCastOverflowedUintDowncast(40, value);\n        }\n        return uint40(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint32 from uint256, reverting on\n     * overflow (when the input is greater than largest uint32).\n     *\n     * Counterpart to Solidity's `uint32` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 32 bits\n     */\n    function toUint32(uint256 value) internal pure returns (uint32) {\n        if (value > type(uint32).max) {\n            revert SafeCastOverflowedUintDowncast(32, value);\n        }\n        return uint32(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint24 from uint256, reverting on\n     * overflow (when the input is greater than largest uint24).\n     *\n     * Counterpart to Solidity's `uint24` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 24 bits\n     */\n    function toUint24(uint256 value) internal pure returns (uint24) {\n        if (value > type(uint24).max) {\n            revert SafeCastOverflowedUintDowncast(24, value);\n        }\n        return uint24(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint16 from uint256, reverting on\n     * overflow (when the input is greater than largest uint16).\n     *\n     * Counterpart to Solidity's `uint16` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 16 bits\n     */\n    function toUint16(uint256 value) internal pure returns (uint16) {\n        if (value > type(uint16).max) {\n            revert SafeCastOverflowedUintDowncast(16, value);\n        }\n        return uint16(value);\n    }\n\n    /**\n     * @dev Returns the downcasted uint8 from uint256, reverting on\n     * overflow (when the input is greater than largest uint8).\n     *\n     * Counterpart to Solidity's `uint8` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 8 bits\n     */\n    function toUint8(uint256 value) internal pure returns (uint8) {\n        if (value > type(uint8).max) {\n            revert SafeCastOverflowedUintDowncast(8, value);\n        }\n        return uint8(value);\n    }\n\n    /**\n     * @dev Converts a signed int256 into an unsigned uint256.\n     *\n     * Requirements:\n     *\n     * - input must be greater than or equal to 0.\n     */\n    function toUint256(int256 value) internal pure returns (uint256) {\n        if (value < 0) {\n            revert SafeCastOverflowedIntToUint(value);\n        }\n        return uint256(value);\n    }\n\n    /**\n     * @dev Returns the downcasted int248 from int256, reverting on\n     * overflow (when the input is less than smallest int248 or\n     * greater than largest int248).\n     *\n     * Counterpart to Solidity's `int248` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 248 bits\n     */\n    function toInt248(int256 value) internal pure returns (int248 downcasted) {\n        downcasted = int248(value);\n        if (downcasted != value) {\n            revert SafeCastOverflowedIntDowncast(248, value);\n        }\n    }\n\n    /**\n     * @dev Returns the downcasted int240 from int256, reverting on\n     * overflow (when the input is less than smallest int240 or\n     * greater than largest int240).\n     *\n     * Counterpart to Solidity's `int240` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 240 bits\n     */\n    function toInt240(int256 value) internal pure returns (int240 downcasted) {\n        downcasted = int240(value);\n        if (downcasted != value) {\n            revert SafeCastOverflowedIntDowncast(240, value);\n        }\n    }\n\n    /**\n     * @dev Returns the downcasted int232 from int256, reverting on\n     * overflow (when the input is less than smallest int232 or\n     * greater than largest int232).\n     *\n     * Counterpart to Solidity's `int232` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 232 bits\n     */\n    function toInt232(int256 value) internal pure returns (int232 downcasted) {\n        downcasted = int232(value);\n        if (downcasted != value) {\n            revert SafeCastOverflowedIntDowncast(232, value);\n        }\n    }\n\n    /**\n     * @dev Returns the downcasted int224 from int256, reverting on\n     * overflow (when the input is less than smallest int224 or\n     * greater than largest int224).\n     *\n     * Counterpart to Solidity's `int224` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 224 bits\n     */\n    function toInt224(int256 value) internal pure returns (int224 downcasted) {\n        downcasted = int224(value);\n        if (downcasted != value) {\n            revert SafeCastOverflowedIntDowncast(224, value);\n        }\n    }\n\n    /**\n     * @dev Returns the downcasted int216 from int256, reverting on\n     * overflow (when the input is less than smallest int216 or\n     * greater than largest int216).\n     *\n     * Counterpart to Solidity's `int216` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 216 bits\n     */\n    function toInt216(int256 value) internal pure returns (int216 downcasted) {\n        downcasted = int216(value);\n        if (downcasted != value) {\n            revert SafeCastOverflowedIntDowncast(216, value);\n        }\n    }\n\n    /**\n     * @dev Returns the downcasted int208 from int256, reverting on\n     * overflow (when the input is less than smallest int208 or\n     * greater than largest int208).\n     *\n     * Counterpart to Solidity's `int208` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 208 bits\n     */\n    function toInt208(int256 value) internal pure returns (int208 downcasted) {\n        downcasted = int208(value);\n        if (downcasted != value) {\n            revert SafeCastOverflowedIntDowncast(208, value);\n        }\n    }\n\n    /**\n     * @dev Returns the downcasted int200 from int256, reverting on\n     * overflow (when the input is less than smallest int200 or\n     * greater than largest int200).\n     *\n     * Counterpart to Solidity's `int200` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 200 bits\n     */\n    function toInt200(int256 value) internal pure returns (int200 downcasted) {\n        downcasted = int200(value);\n        if (downcasted != value) {\n            revert SafeCastOverflowedIntDowncast(200, value);\n        }\n    }\n\n    /**\n     * @dev Returns the downcasted int192 from int256, reverting on\n     * overflow (when the input is less than smallest int192 or\n     * greater than largest int192).\n     *\n     * Counterpart to Solidity's `int192` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 192 bits\n     */\n    function toInt192(int256 value) internal pure returns (int192 downcasted) {\n        downcasted = int192(value);\n        if (downcasted != value) {\n            revert SafeCastOverflowedIntDowncast(192, value);\n        }\n    }\n\n    /**\n     * @dev Returns the downcasted int184 from int256, reverting on\n     * overflow (when the input is less than smallest int184 or\n     * greater than largest int184).\n     *\n     * Counterpart to Solidity's `int184` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 184 bits\n     */\n    function toInt184(int256 value) internal pure returns (int184 downcasted) {\n        downcasted = int184(value);\n        if (downcasted != value) {\n            revert SafeCastOverflowedIntDowncast(184, value);\n        }\n    }\n\n    /**\n     * @dev Returns the downcasted int176 from int256, reverting on\n     * overflow (when the input is less than smallest int176 or\n     * greater than largest int176).\n     *\n     * Counterpart to Solidity's `int176` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 176 bits\n     */\n    function toInt176(int256 value) internal pure returns (int176 downcasted) {\n        downcasted = int176(value);\n        if (downcasted != value) {\n            revert SafeCastOverflowedIntDowncast(176, value);\n        }\n    }\n\n    /**\n     * @dev Returns the downcasted int168 from int256, reverting on\n     * overflow (when the input is less than smallest int168 or\n     * greater than largest int168).\n     *\n     * Counterpart to Solidity's `int168` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 168 bits\n     */\n    function toInt168(int256 value) internal pure returns (int168 downcasted) {\n        downcasted = int168(value);\n        if (downcasted != value) {\n            revert SafeCastOverflowedIntDowncast(168, value);\n        }\n    }\n\n    /**\n     * @dev Returns the downcasted int160 from int256, reverting on\n     * overflow (when the input is less than smallest int160 or\n     * greater than largest int160).\n     *\n     * Counterpart to Solidity's `int160` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 160 bits\n     */\n    function toInt160(int256 value) internal pure returns (int160 downcasted) {\n        downcasted = int160(value);\n        if (downcasted != value) {\n            revert SafeCastOverflowedIntDowncast(160, value);\n        }\n    }\n\n    /**\n     * @dev Returns the downcasted int152 from int256, reverting on\n     * overflow (when the input is less than smallest int152 or\n     * greater than largest int152).\n     *\n     * Counterpart to Solidity's `int152` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 152 bits\n     */\n    function toInt152(int256 value) internal pure returns (int152 downcasted) {\n        downcasted = int152(value);\n        if (downcasted != value) {\n            revert SafeCastOverflowedIntDowncast(152, value);\n        }\n    }\n\n    /**\n     * @dev Returns the downcasted int144 from int256, reverting on\n     * overflow (when the input is less than smallest int144 or\n     * greater than largest int144).\n     *\n     * Counterpart to Solidity's `int144` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 144 bits\n     */\n    function toInt144(int256 value) internal pure returns (int144 downcasted) {\n        downcasted = int144(value);\n        if (downcasted != value) {\n            revert SafeCastOverflowedIntDowncast(144, value);\n        }\n    }\n\n    /**\n     * @dev Returns the downcasted int136 from int256, reverting on\n     * overflow (when the input is less than smallest int136 or\n     * greater than largest int136).\n     *\n     * Counterpart to Solidity's `int136` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 136 bits\n     */\n    function toInt136(int256 value) internal pure returns (int136 downcasted) {\n        downcasted = int136(value);\n        if (downcasted != value) {\n            revert SafeCastOverflowedIntDowncast(136, value);\n        }\n    }\n\n    /**\n     * @dev Returns the downcasted int128 from int256, reverting on\n     * overflow (when the input is less than smallest int128 or\n     * greater than largest int128).\n     *\n     * Counterpart to Solidity's `int128` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 128 bits\n     */\n    function toInt128(int256 value) internal pure returns (int128 downcasted) {\n        downcasted = int128(value);\n        if (downcasted != value) {\n            revert SafeCastOverflowedIntDowncast(128, value);\n        }\n    }\n\n    /**\n     * @dev Returns the downcasted int120 from int256, reverting on\n     * overflow (when the input is less than smallest int120 or\n     * greater than largest int120).\n     *\n     * Counterpart to Solidity's `int120` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 120 bits\n     */\n    function toInt120(int256 value) internal pure returns (int120 downcasted) {\n        downcasted = int120(value);\n        if (downcasted != value) {\n            revert SafeCastOverflowedIntDowncast(120, value);\n        }\n    }\n\n    /**\n     * @dev Returns the downcasted int112 from int256, reverting on\n     * overflow (when the input is less than smallest int112 or\n     * greater than largest int112).\n     *\n     * Counterpart to Solidity's `int112` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 112 bits\n     */\n    function toInt112(int256 value) internal pure returns (int112 downcasted) {\n        downcasted = int112(value);\n        if (downcasted != value) {\n            revert SafeCastOverflowedIntDowncast(112, value);\n        }\n    }\n\n    /**\n     * @dev Returns the downcasted int104 from int256, reverting on\n     * overflow (when the input is less than smallest int104 or\n     * greater than largest int104).\n     *\n     * Counterpart to Solidity's `int104` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 104 bits\n     */\n    function toInt104(int256 value) internal pure returns (int104 downcasted) {\n        downcasted = int104(value);\n        if (downcasted != value) {\n            revert SafeCastOverflowedIntDowncast(104, value);\n        }\n    }\n\n    /**\n     * @dev Returns the downcasted int96 from int256, reverting on\n     * overflow (when the input is less than smallest int96 or\n     * greater than largest int96).\n     *\n     * Counterpart to Solidity's `int96` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 96 bits\n     */\n    function toInt96(int256 value) internal pure returns (int96 downcasted) {\n        downcasted = int96(value);\n        if (downcasted != value) {\n            revert SafeCastOverflowedIntDowncast(96, value);\n        }\n    }\n\n    /**\n     * @dev Returns the downcasted int88 from int256, reverting on\n     * overflow (when the input is less than smallest int88 or\n     * greater than largest int88).\n     *\n     * Counterpart to Solidity's `int88` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 88 bits\n     */\n    function toInt88(int256 value) internal pure returns (int88 downcasted) {\n        downcasted = int88(value);\n        if (downcasted != value) {\n            revert SafeCastOverflowedIntDowncast(88, value);\n        }\n    }\n\n    /**\n     * @dev Returns the downcasted int80 from int256, reverting on\n     * overflow (when the input is less than smallest int80 or\n     * greater than largest int80).\n     *\n     * Counterpart to Solidity's `int80` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 80 bits\n     */\n    function toInt80(int256 value) internal pure returns (int80 downcasted) {\n        downcasted = int80(value);\n        if (downcasted != value) {\n            revert SafeCastOverflowedIntDowncast(80, value);\n        }\n    }\n\n    /**\n     * @dev Returns the downcasted int72 from int256, reverting on\n     * overflow (when the input is less than smallest int72 or\n     * greater than largest int72).\n     *\n     * Counterpart to Solidity's `int72` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 72 bits\n     */\n    function toInt72(int256 value) internal pure returns (int72 downcasted) {\n        downcasted = int72(value);\n        if (downcasted != value) {\n            revert SafeCastOverflowedIntDowncast(72, value);\n        }\n    }\n\n    /**\n     * @dev Returns the downcasted int64 from int256, reverting on\n     * overflow (when the input is less than smallest int64 or\n     * greater than largest int64).\n     *\n     * Counterpart to Solidity's `int64` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 64 bits\n     */\n    function toInt64(int256 value) internal pure returns (int64 downcasted) {\n        downcasted = int64(value);\n        if (downcasted != value) {\n            revert SafeCastOverflowedIntDowncast(64, value);\n        }\n    }\n\n    /**\n     * @dev Returns the downcasted int56 from int256, reverting on\n     * overflow (when the input is less than smallest int56 or\n     * greater than largest int56).\n     *\n     * Counterpart to Solidity's `int56` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 56 bits\n     */\n    function toInt56(int256 value) internal pure returns (int56 downcasted) {\n        downcasted = int56(value);\n        if (downcasted != value) {\n            revert SafeCastOverflowedIntDowncast(56, value);\n        }\n    }\n\n    /**\n     * @dev Returns the downcasted int48 from int256, reverting on\n     * overflow (when the input is less than smallest int48 or\n     * greater than largest int48).\n     *\n     * Counterpart to Solidity's `int48` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 48 bits\n     */\n    function toInt48(int256 value) internal pure returns (int48 downcasted) {\n        downcasted = int48(value);\n        if (downcasted != value) {\n            revert SafeCastOverflowedIntDowncast(48, value);\n        }\n    }\n\n    /**\n     * @dev Returns the downcasted int40 from int256, reverting on\n     * overflow (when the input is less than smallest int40 or\n     * greater than largest int40).\n     *\n     * Counterpart to Solidity's `int40` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 40 bits\n     */\n    function toInt40(int256 value) internal pure returns (int40 downcasted) {\n        downcasted = int40(value);\n        if (downcasted != value) {\n            revert SafeCastOverflowedIntDowncast(40, value);\n        }\n    }\n\n    /**\n     * @dev Returns the downcasted int32 from int256, reverting on\n     * overflow (when the input is less than smallest int32 or\n     * greater than largest int32).\n     *\n     * Counterpart to Solidity's `int32` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 32 bits\n     */\n    function toInt32(int256 value) internal pure returns (int32 downcasted) {\n        downcasted = int32(value);\n        if (downcasted != value) {\n            revert SafeCastOverflowedIntDowncast(32, value);\n        }\n    }\n\n    /**\n     * @dev Returns the downcasted int24 from int256, reverting on\n     * overflow (when the input is less than smallest int24 or\n     * greater than largest int24).\n     *\n     * Counterpart to Solidity's `int24` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 24 bits\n     */\n    function toInt24(int256 value) internal pure returns (int24 downcasted) {\n        downcasted = int24(value);\n        if (downcasted != value) {\n            revert SafeCastOverflowedIntDowncast(24, value);\n        }\n    }\n\n    /**\n     * @dev Returns the downcasted int16 from int256, reverting on\n     * overflow (when the input is less than smallest int16 or\n     * greater than largest int16).\n     *\n     * Counterpart to Solidity's `int16` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 16 bits\n     */\n    function toInt16(int256 value) internal pure returns (int16 downcasted) {\n        downcasted = int16(value);\n        if (downcasted != value) {\n            revert SafeCastOverflowedIntDowncast(16, value);\n        }\n    }\n\n    /**\n     * @dev Returns the downcasted int8 from int256, reverting on\n     * overflow (when the input is less than smallest int8 or\n     * greater than largest int8).\n     *\n     * Counterpart to Solidity's `int8` operator.\n     *\n     * Requirements:\n     *\n     * - input must fit into 8 bits\n     */\n    function toInt8(int256 value) internal pure returns (int8 downcasted) {\n        downcasted = int8(value);\n        if (downcasted != value) {\n            revert SafeCastOverflowedIntDowncast(8, value);\n        }\n    }\n\n    /**\n     * @dev Converts an unsigned uint256 into a signed int256.\n     *\n     * Requirements:\n     *\n     * - input must be less than or equal to maxInt256.\n     */\n    function toInt256(uint256 value) internal pure returns (int256) {\n        // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive\n        if (value > uint256(type(int256).max)) {\n            revert SafeCastOverflowedUintToInt(value);\n        }\n        return int256(value);\n    }\n\n    /**\n     * @dev Cast a boolean (false or true) to a uint256 (0 or 1) with no jump.\n     */\n    function toUint(bool b) internal pure returns (uint256 u) {\n        assembly (\"memory-safe\") {\n            u := iszero(iszero(b))\n        }\n    }\n}\n"
      },
      "@openzeppelin/contracts/utils/math/SignedMath.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/math/SignedMath.sol)\n\npragma solidity ^0.8.20;\n\nimport {SafeCast} from \"./SafeCast.sol\";\n\n/**\n * @dev Standard signed math utilities missing in the Solidity language.\n */\nlibrary SignedMath {\n    /**\n     * @dev Branchless ternary evaluation for `a ? b : c`. Gas costs are constant.\n     *\n     * IMPORTANT: This function may reduce bytecode size and consume less gas when used standalone.\n     * However, the compiler may optimize Solidity ternary operations (i.e. `a ? b : c`) to only compute\n     * one branch when needed, making this function more expensive.\n     */\n    function ternary(bool condition, int256 a, int256 b) internal pure returns (int256) {\n        unchecked {\n            // branchless ternary works because:\n            // b ^ (a ^ b) == a\n            // b ^ 0 == b\n            return b ^ ((a ^ b) * int256(SafeCast.toUint(condition)));\n        }\n    }\n\n    /**\n     * @dev Returns the largest of two signed numbers.\n     */\n    function max(int256 a, int256 b) internal pure returns (int256) {\n        return ternary(a > b, a, b);\n    }\n\n    /**\n     * @dev Returns the smallest of two signed numbers.\n     */\n    function min(int256 a, int256 b) internal pure returns (int256) {\n        return ternary(a < b, a, b);\n    }\n\n    /**\n     * @dev Returns the average of two signed numbers without overflow.\n     * The result is rounded towards zero.\n     */\n    function average(int256 a, int256 b) internal pure returns (int256) {\n        // Formula from the book \"Hacker's Delight\"\n        int256 x = (a & b) + ((a ^ b) >> 1);\n        return x + (int256(uint256(x) >> 255) & (a ^ b));\n    }\n\n    /**\n     * @dev Returns the absolute unsigned value of a signed value.\n     */\n    function abs(int256 n) internal pure returns (uint256) {\n        unchecked {\n            // Formula from the \"Bit Twiddling Hacks\" by Sean Eron Anderson.\n            // Since `n` is a signed integer, the generated bytecode will use the SAR opcode to perform the right shift,\n            // taking advantage of the most significant (or \"sign\" bit) in two's complement representation.\n            // This opcode adds new most significant bits set to the value of the previous most significant bit. As a result,\n            // the mask will either be `bytes32(0)` (if n is positive) or `~bytes32(0)` (if n is negative).\n            int256 mask = n >> 255;\n\n            // A `bytes32(0)` mask leaves the input unchanged, while a `~bytes32(0)` mask complements it.\n            return uint256((n + mask) ^ mask);\n        }\n    }\n}\n"
      },
      "@openzeppelin/contracts/utils/Panic.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/Panic.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Helper library for emitting standardized panic codes.\n *\n * ```solidity\n * contract Example {\n *      using Panic for uint256;\n *\n *      // Use any of the declared internal constants\n *      function foo() { Panic.GENERIC.panic(); }\n *\n *      // Alternatively\n *      function foo() { Panic.panic(Panic.GENERIC); }\n * }\n * ```\n *\n * Follows the list from https://github.com/ethereum/solidity/blob/v0.8.24/libsolutil/ErrorCodes.h[libsolutil].\n *\n * _Available since v5.1._\n */\n// slither-disable-next-line unused-state\nlibrary Panic {\n    /// @dev generic / unspecified error\n    uint256 internal constant GENERIC = 0x00;\n    /// @dev used by the assert() builtin\n    uint256 internal constant ASSERT = 0x01;\n    /// @dev arithmetic underflow or overflow\n    uint256 internal constant UNDER_OVERFLOW = 0x11;\n    /// @dev division or modulo by zero\n    uint256 internal constant DIVISION_BY_ZERO = 0x12;\n    /// @dev enum conversion error\n    uint256 internal constant ENUM_CONVERSION_ERROR = 0x21;\n    /// @dev invalid encoding in storage\n    uint256 internal constant STORAGE_ENCODING_ERROR = 0x22;\n    /// @dev empty array pop\n    uint256 internal constant EMPTY_ARRAY_POP = 0x31;\n    /// @dev array out of bounds access\n    uint256 internal constant ARRAY_OUT_OF_BOUNDS = 0x32;\n    /// @dev resource error (too large allocation or too large array)\n    uint256 internal constant RESOURCE_ERROR = 0x41;\n    /// @dev calling invalid internal function\n    uint256 internal constant INVALID_INTERNAL_FUNCTION = 0x51;\n\n    /// @dev Reverts with a panic code. Recommended to use with\n    /// the internal constants with predefined codes.\n    function panic(uint256 code) internal pure {\n        assembly (\"memory-safe\") {\n            mstore(0x00, 0x4e487b71)\n            mstore(0x20, code)\n            revert(0x1c, 0x24)\n        }\n    }\n}\n"
      },
      "@openzeppelin/contracts/utils/SlotDerivation.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.3.0) (utils/SlotDerivation.sol)\n// This file was procedurally generated from scripts/generate/templates/SlotDerivation.js.\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Library for computing storage (and transient storage) locations from namespaces and deriving slots\n * corresponding to standard patterns. The derivation method for array and mapping matches the storage layout used by\n * the solidity language / compiler.\n *\n * See https://docs.soliditylang.org/en/v0.8.20/internals/layout_in_storage.html#mappings-and-dynamic-arrays[Solidity docs for mappings and dynamic arrays.].\n *\n * Example usage:\n * ```solidity\n * contract Example {\n *     // Add the library methods\n *     using StorageSlot for bytes32;\n *     using SlotDerivation for bytes32;\n *\n *     // Declare a namespace\n *     string private constant _NAMESPACE = \"<namespace>\"; // eg. OpenZeppelin.Slot\n *\n *     function setValueInNamespace(uint256 key, address newValue) internal {\n *         _NAMESPACE.erc7201Slot().deriveMapping(key).getAddressSlot().value = newValue;\n *     }\n *\n *     function getValueInNamespace(uint256 key) internal view returns (address) {\n *         return _NAMESPACE.erc7201Slot().deriveMapping(key).getAddressSlot().value;\n *     }\n * }\n * ```\n *\n * TIP: Consider using this library along with {StorageSlot}.\n *\n * NOTE: This library provides a way to manipulate storage locations in a non-standard way. Tooling for checking\n * upgrade safety will ignore the slots accessed through this library.\n *\n * _Available since v5.1._\n */\nlibrary SlotDerivation {\n    /**\n     * @dev Derive an ERC-7201 slot from a string (namespace).\n     */\n    function erc7201Slot(string memory namespace) internal pure returns (bytes32 slot) {\n        assembly (\"memory-safe\") {\n            mstore(0x00, sub(keccak256(add(namespace, 0x20), mload(namespace)), 1))\n            slot := and(keccak256(0x00, 0x20), not(0xff))\n        }\n    }\n\n    /**\n     * @dev Add an offset to a slot to get the n-th element of a structure or an array.\n     */\n    function offset(bytes32 slot, uint256 pos) internal pure returns (bytes32 result) {\n        unchecked {\n            return bytes32(uint256(slot) + pos);\n        }\n    }\n\n    /**\n     * @dev Derive the location of the first element in an array from the slot where the length is stored.\n     */\n    function deriveArray(bytes32 slot) internal pure returns (bytes32 result) {\n        assembly (\"memory-safe\") {\n            mstore(0x00, slot)\n            result := keccak256(0x00, 0x20)\n        }\n    }\n\n    /**\n     * @dev Derive the location of a mapping element from the key.\n     */\n    function deriveMapping(bytes32 slot, address key) internal pure returns (bytes32 result) {\n        assembly (\"memory-safe\") {\n            mstore(0x00, and(key, shr(96, not(0))))\n            mstore(0x20, slot)\n            result := keccak256(0x00, 0x40)\n        }\n    }\n\n    /**\n     * @dev Derive the location of a mapping element from the key.\n     */\n    function deriveMapping(bytes32 slot, bool key) internal pure returns (bytes32 result) {\n        assembly (\"memory-safe\") {\n            mstore(0x00, iszero(iszero(key)))\n            mstore(0x20, slot)\n            result := keccak256(0x00, 0x40)\n        }\n    }\n\n    /**\n     * @dev Derive the location of a mapping element from the key.\n     */\n    function deriveMapping(bytes32 slot, bytes32 key) internal pure returns (bytes32 result) {\n        assembly (\"memory-safe\") {\n            mstore(0x00, key)\n            mstore(0x20, slot)\n            result := keccak256(0x00, 0x40)\n        }\n    }\n\n    /**\n     * @dev Derive the location of a mapping element from the key.\n     */\n    function deriveMapping(bytes32 slot, uint256 key) internal pure returns (bytes32 result) {\n        assembly (\"memory-safe\") {\n            mstore(0x00, key)\n            mstore(0x20, slot)\n            result := keccak256(0x00, 0x40)\n        }\n    }\n\n    /**\n     * @dev Derive the location of a mapping element from the key.\n     */\n    function deriveMapping(bytes32 slot, int256 key) internal pure returns (bytes32 result) {\n        assembly (\"memory-safe\") {\n            mstore(0x00, key)\n            mstore(0x20, slot)\n            result := keccak256(0x00, 0x40)\n        }\n    }\n\n    /**\n     * @dev Derive the location of a mapping element from the key.\n     */\n    function deriveMapping(bytes32 slot, string memory key) internal pure returns (bytes32 result) {\n        assembly (\"memory-safe\") {\n            let length := mload(key)\n            let begin := add(key, 0x20)\n            let end := add(begin, length)\n            let cache := mload(end)\n            mstore(end, slot)\n            result := keccak256(begin, add(length, 0x20))\n            mstore(end, cache)\n        }\n    }\n\n    /**\n     * @dev Derive the location of a mapping element from the key.\n     */\n    function deriveMapping(bytes32 slot, bytes memory key) internal pure returns (bytes32 result) {\n        assembly (\"memory-safe\") {\n            let length := mload(key)\n            let begin := add(key, 0x20)\n            let end := add(begin, length)\n            let cache := mload(end)\n            mstore(end, slot)\n            result := keccak256(begin, add(length, 0x20))\n            mstore(end, cache)\n        }\n    }\n}\n"
      },
      "@openzeppelin/contracts/utils/StorageSlot.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (utils/StorageSlot.sol)\n// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Library for reading and writing primitive types to specific storage slots.\n *\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\n * This library helps with reading and writing to such slots without the need for inline assembly.\n *\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\n *\n * Example usage to set ERC-1967 implementation slot:\n * ```solidity\n * contract ERC1967 {\n *     // Define the slot. Alternatively, use the SlotDerivation library to derive the slot.\n *     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n *\n *     function _getImplementation() internal view returns (address) {\n *         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n *     }\n *\n *     function _setImplementation(address newImplementation) internal {\n *         require(newImplementation.code.length > 0);\n *         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n *     }\n * }\n * ```\n *\n * TIP: Consider using this library along with {SlotDerivation}.\n */\nlibrary StorageSlot {\n    struct AddressSlot {\n        address value;\n    }\n\n    struct BooleanSlot {\n        bool value;\n    }\n\n    struct Bytes32Slot {\n        bytes32 value;\n    }\n\n    struct Uint256Slot {\n        uint256 value;\n    }\n\n    struct Int256Slot {\n        int256 value;\n    }\n\n    struct StringSlot {\n        string value;\n    }\n\n    struct BytesSlot {\n        bytes value;\n    }\n\n    /**\n     * @dev Returns an `AddressSlot` with member `value` located at `slot`.\n     */\n    function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\n        assembly (\"memory-safe\") {\n            r.slot := slot\n        }\n    }\n\n    /**\n     * @dev Returns a `BooleanSlot` with member `value` located at `slot`.\n     */\n    function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\n        assembly (\"memory-safe\") {\n            r.slot := slot\n        }\n    }\n\n    /**\n     * @dev Returns a `Bytes32Slot` with member `value` located at `slot`.\n     */\n    function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\n        assembly (\"memory-safe\") {\n            r.slot := slot\n        }\n    }\n\n    /**\n     * @dev Returns a `Uint256Slot` with member `value` located at `slot`.\n     */\n    function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\n        assembly (\"memory-safe\") {\n            r.slot := slot\n        }\n    }\n\n    /**\n     * @dev Returns a `Int256Slot` with member `value` located at `slot`.\n     */\n    function getInt256Slot(bytes32 slot) internal pure returns (Int256Slot storage r) {\n        assembly (\"memory-safe\") {\n            r.slot := slot\n        }\n    }\n\n    /**\n     * @dev Returns a `StringSlot` with member `value` located at `slot`.\n     */\n    function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {\n        assembly (\"memory-safe\") {\n            r.slot := slot\n        }\n    }\n\n    /**\n     * @dev Returns an `StringSlot` representation of the string storage pointer `store`.\n     */\n    function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {\n        assembly (\"memory-safe\") {\n            r.slot := store.slot\n        }\n    }\n\n    /**\n     * @dev Returns a `BytesSlot` with member `value` located at `slot`.\n     */\n    function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {\n        assembly (\"memory-safe\") {\n            r.slot := slot\n        }\n    }\n\n    /**\n     * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`.\n     */\n    function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {\n        assembly (\"memory-safe\") {\n            r.slot := store.slot\n        }\n    }\n}\n"
      },
      "@openzeppelin/contracts/utils/Strings.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (utils/Strings.sol)\n\npragma solidity ^0.8.20;\n\nimport {Math} from \"./math/Math.sol\";\nimport {SafeCast} from \"./math/SafeCast.sol\";\nimport {SignedMath} from \"./math/SignedMath.sol\";\n\n/**\n * @dev String operations.\n */\nlibrary Strings {\n    using SafeCast for *;\n\n    bytes16 private constant HEX_DIGITS = \"0123456789abcdef\";\n    uint8 private constant ADDRESS_LENGTH = 20;\n    uint256 private constant SPECIAL_CHARS_LOOKUP =\n        (1 << 0x08) | // backspace\n            (1 << 0x09) | // tab\n            (1 << 0x0a) | // newline\n            (1 << 0x0c) | // form feed\n            (1 << 0x0d) | // carriage return\n            (1 << 0x22) | // double quote\n            (1 << 0x5c); // backslash\n\n    /**\n     * @dev The `value` string doesn't fit in the specified `length`.\n     */\n    error StringsInsufficientHexLength(uint256 value, uint256 length);\n\n    /**\n     * @dev The string being parsed contains characters that are not in scope of the given base.\n     */\n    error StringsInvalidChar();\n\n    /**\n     * @dev The string being parsed is not a properly formatted address.\n     */\n    error StringsInvalidAddressFormat();\n\n    /**\n     * @dev Converts a `uint256` to its ASCII `string` decimal representation.\n     */\n    function toString(uint256 value) internal pure returns (string memory) {\n        unchecked {\n            uint256 length = Math.log10(value) + 1;\n            string memory buffer = new string(length);\n            uint256 ptr;\n            assembly (\"memory-safe\") {\n                ptr := add(add(buffer, 0x20), length)\n            }\n            while (true) {\n                ptr--;\n                assembly (\"memory-safe\") {\n                    mstore8(ptr, byte(mod(value, 10), HEX_DIGITS))\n                }\n                value /= 10;\n                if (value == 0) break;\n            }\n            return buffer;\n        }\n    }\n\n    /**\n     * @dev Converts a `int256` to its ASCII `string` decimal representation.\n     */\n    function toStringSigned(int256 value) internal pure returns (string memory) {\n        return string.concat(value < 0 ? \"-\" : \"\", toString(SignedMath.abs(value)));\n    }\n\n    /**\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\n     */\n    function toHexString(uint256 value) internal pure returns (string memory) {\n        unchecked {\n            return toHexString(value, Math.log256(value) + 1);\n        }\n    }\n\n    /**\n     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\n     */\n    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\n        uint256 localValue = value;\n        bytes memory buffer = new bytes(2 * length + 2);\n        buffer[0] = \"0\";\n        buffer[1] = \"x\";\n        for (uint256 i = 2 * length + 1; i > 1; --i) {\n            buffer[i] = HEX_DIGITS[localValue & 0xf];\n            localValue >>= 4;\n        }\n        if (localValue != 0) {\n            revert StringsInsufficientHexLength(value, length);\n        }\n        return string(buffer);\n    }\n\n    /**\n     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal\n     * representation.\n     */\n    function toHexString(address addr) internal pure returns (string memory) {\n        return toHexString(uint256(uint160(addr)), ADDRESS_LENGTH);\n    }\n\n    /**\n     * @dev Converts an `address` with fixed length of 20 bytes to its checksummed ASCII `string` hexadecimal\n     * representation, according to EIP-55.\n     */\n    function toChecksumHexString(address addr) internal pure returns (string memory) {\n        bytes memory buffer = bytes(toHexString(addr));\n\n        // hash the hex part of buffer (skip length + 2 bytes, length 40)\n        uint256 hashValue;\n        assembly (\"memory-safe\") {\n            hashValue := shr(96, keccak256(add(buffer, 0x22), 40))\n        }\n\n        for (uint256 i = 41; i > 1; --i) {\n            // possible values for buffer[i] are 48 (0) to 57 (9) and 97 (a) to 102 (f)\n            if (hashValue & 0xf > 7 && uint8(buffer[i]) > 96) {\n                // case shift by xoring with 0x20\n                buffer[i] ^= 0x20;\n            }\n            hashValue >>= 4;\n        }\n        return string(buffer);\n    }\n\n    /**\n     * @dev Returns true if the two strings are equal.\n     */\n    function equal(string memory a, string memory b) internal pure returns (bool) {\n        return bytes(a).length == bytes(b).length && keccak256(bytes(a)) == keccak256(bytes(b));\n    }\n\n    /**\n     * @dev Parse a decimal string and returns the value as a `uint256`.\n     *\n     * Requirements:\n     * - The string must be formatted as `[0-9]*`\n     * - The result must fit into an `uint256` type\n     */\n    function parseUint(string memory input) internal pure returns (uint256) {\n        return parseUint(input, 0, bytes(input).length);\n    }\n\n    /**\n     * @dev Variant of {parseUint-string} that parses a substring of `input` located between position `begin` (included) and\n     * `end` (excluded).\n     *\n     * Requirements:\n     * - The substring must be formatted as `[0-9]*`\n     * - The result must fit into an `uint256` type\n     */\n    function parseUint(string memory input, uint256 begin, uint256 end) internal pure returns (uint256) {\n        (bool success, uint256 value) = tryParseUint(input, begin, end);\n        if (!success) revert StringsInvalidChar();\n        return value;\n    }\n\n    /**\n     * @dev Variant of {parseUint-string} that returns false if the parsing fails because of an invalid character.\n     *\n     * NOTE: This function will revert if the result does not fit in a `uint256`.\n     */\n    function tryParseUint(string memory input) internal pure returns (bool success, uint256 value) {\n        return _tryParseUintUncheckedBounds(input, 0, bytes(input).length);\n    }\n\n    /**\n     * @dev Variant of {parseUint-string-uint256-uint256} that returns false if the parsing fails because of an invalid\n     * character.\n     *\n     * NOTE: This function will revert if the result does not fit in a `uint256`.\n     */\n    function tryParseUint(\n        string memory input,\n        uint256 begin,\n        uint256 end\n    ) internal pure returns (bool success, uint256 value) {\n        if (end > bytes(input).length || begin > end) return (false, 0);\n        return _tryParseUintUncheckedBounds(input, begin, end);\n    }\n\n    /**\n     * @dev Implementation of {tryParseUint-string-uint256-uint256} that does not check bounds. Caller should make sure that\n     * `begin <= end <= input.length`. Other inputs would result in undefined behavior.\n     */\n    function _tryParseUintUncheckedBounds(\n        string memory input,\n        uint256 begin,\n        uint256 end\n    ) private pure returns (bool success, uint256 value) {\n        bytes memory buffer = bytes(input);\n\n        uint256 result = 0;\n        for (uint256 i = begin; i < end; ++i) {\n            uint8 chr = _tryParseChr(bytes1(_unsafeReadBytesOffset(buffer, i)));\n            if (chr > 9) return (false, 0);\n            result *= 10;\n            result += chr;\n        }\n        return (true, result);\n    }\n\n    /**\n     * @dev Parse a decimal string and returns the value as a `int256`.\n     *\n     * Requirements:\n     * - The string must be formatted as `[-+]?[0-9]*`\n     * - The result must fit in an `int256` type.\n     */\n    function parseInt(string memory input) internal pure returns (int256) {\n        return parseInt(input, 0, bytes(input).length);\n    }\n\n    /**\n     * @dev Variant of {parseInt-string} that parses a substring of `input` located between position `begin` (included) and\n     * `end` (excluded).\n     *\n     * Requirements:\n     * - The substring must be formatted as `[-+]?[0-9]*`\n     * - The result must fit in an `int256` type.\n     */\n    function parseInt(string memory input, uint256 begin, uint256 end) internal pure returns (int256) {\n        (bool success, int256 value) = tryParseInt(input, begin, end);\n        if (!success) revert StringsInvalidChar();\n        return value;\n    }\n\n    /**\n     * @dev Variant of {parseInt-string} that returns false if the parsing fails because of an invalid character or if\n     * the result does not fit in a `int256`.\n     *\n     * NOTE: This function will revert if the absolute value of the result does not fit in a `uint256`.\n     */\n    function tryParseInt(string memory input) internal pure returns (bool success, int256 value) {\n        return _tryParseIntUncheckedBounds(input, 0, bytes(input).length);\n    }\n\n    uint256 private constant ABS_MIN_INT256 = 2 ** 255;\n\n    /**\n     * @dev Variant of {parseInt-string-uint256-uint256} that returns false if the parsing fails because of an invalid\n     * character or if the result does not fit in a `int256`.\n     *\n     * NOTE: This function will revert if the absolute value of the result does not fit in a `uint256`.\n     */\n    function tryParseInt(\n        string memory input,\n        uint256 begin,\n        uint256 end\n    ) internal pure returns (bool success, int256 value) {\n        if (end > bytes(input).length || begin > end) return (false, 0);\n        return _tryParseIntUncheckedBounds(input, begin, end);\n    }\n\n    /**\n     * @dev Implementation of {tryParseInt-string-uint256-uint256} that does not check bounds. Caller should make sure that\n     * `begin <= end <= input.length`. Other inputs would result in undefined behavior.\n     */\n    function _tryParseIntUncheckedBounds(\n        string memory input,\n        uint256 begin,\n        uint256 end\n    ) private pure returns (bool success, int256 value) {\n        bytes memory buffer = bytes(input);\n\n        // Check presence of a negative sign.\n        bytes1 sign = begin == end ? bytes1(0) : bytes1(_unsafeReadBytesOffset(buffer, begin)); // don't do out-of-bound (possibly unsafe) read if sub-string is empty\n        bool positiveSign = sign == bytes1(\"+\");\n        bool negativeSign = sign == bytes1(\"-\");\n        uint256 offset = (positiveSign || negativeSign).toUint();\n\n        (bool absSuccess, uint256 absValue) = tryParseUint(input, begin + offset, end);\n\n        if (absSuccess && absValue < ABS_MIN_INT256) {\n            return (true, negativeSign ? -int256(absValue) : int256(absValue));\n        } else if (absSuccess && negativeSign && absValue == ABS_MIN_INT256) {\n            return (true, type(int256).min);\n        } else return (false, 0);\n    }\n\n    /**\n     * @dev Parse a hexadecimal string (with or without \"0x\" prefix), and returns the value as a `uint256`.\n     *\n     * Requirements:\n     * - The string must be formatted as `(0x)?[0-9a-fA-F]*`\n     * - The result must fit in an `uint256` type.\n     */\n    function parseHexUint(string memory input) internal pure returns (uint256) {\n        return parseHexUint(input, 0, bytes(input).length);\n    }\n\n    /**\n     * @dev Variant of {parseHexUint-string} that parses a substring of `input` located between position `begin` (included) and\n     * `end` (excluded).\n     *\n     * Requirements:\n     * - The substring must be formatted as `(0x)?[0-9a-fA-F]*`\n     * - The result must fit in an `uint256` type.\n     */\n    function parseHexUint(string memory input, uint256 begin, uint256 end) internal pure returns (uint256) {\n        (bool success, uint256 value) = tryParseHexUint(input, begin, end);\n        if (!success) revert StringsInvalidChar();\n        return value;\n    }\n\n    /**\n     * @dev Variant of {parseHexUint-string} that returns false if the parsing fails because of an invalid character.\n     *\n     * NOTE: This function will revert if the result does not fit in a `uint256`.\n     */\n    function tryParseHexUint(string memory input) internal pure returns (bool success, uint256 value) {\n        return _tryParseHexUintUncheckedBounds(input, 0, bytes(input).length);\n    }\n\n    /**\n     * @dev Variant of {parseHexUint-string-uint256-uint256} that returns false if the parsing fails because of an\n     * invalid character.\n     *\n     * NOTE: This function will revert if the result does not fit in a `uint256`.\n     */\n    function tryParseHexUint(\n        string memory input,\n        uint256 begin,\n        uint256 end\n    ) internal pure returns (bool success, uint256 value) {\n        if (end > bytes(input).length || begin > end) return (false, 0);\n        return _tryParseHexUintUncheckedBounds(input, begin, end);\n    }\n\n    /**\n     * @dev Implementation of {tryParseHexUint-string-uint256-uint256} that does not check bounds. Caller should make sure that\n     * `begin <= end <= input.length`. Other inputs would result in undefined behavior.\n     */\n    function _tryParseHexUintUncheckedBounds(\n        string memory input,\n        uint256 begin,\n        uint256 end\n    ) private pure returns (bool success, uint256 value) {\n        bytes memory buffer = bytes(input);\n\n        // skip 0x prefix if present\n        bool hasPrefix = (end > begin + 1) && bytes2(_unsafeReadBytesOffset(buffer, begin)) == bytes2(\"0x\"); // don't do out-of-bound (possibly unsafe) read if sub-string is empty\n        uint256 offset = hasPrefix.toUint() * 2;\n\n        uint256 result = 0;\n        for (uint256 i = begin + offset; i < end; ++i) {\n            uint8 chr = _tryParseChr(bytes1(_unsafeReadBytesOffset(buffer, i)));\n            if (chr > 15) return (false, 0);\n            result *= 16;\n            unchecked {\n                // Multiplying by 16 is equivalent to a shift of 4 bits (with additional overflow check).\n                // This guarantees that adding a value < 16 will not cause an overflow, hence the unchecked.\n                result += chr;\n            }\n        }\n        return (true, result);\n    }\n\n    /**\n     * @dev Parse a hexadecimal string (with or without \"0x\" prefix), and returns the value as an `address`.\n     *\n     * Requirements:\n     * - The string must be formatted as `(0x)?[0-9a-fA-F]{40}`\n     */\n    function parseAddress(string memory input) internal pure returns (address) {\n        return parseAddress(input, 0, bytes(input).length);\n    }\n\n    /**\n     * @dev Variant of {parseAddress-string} that parses a substring of `input` located between position `begin` (included) and\n     * `end` (excluded).\n     *\n     * Requirements:\n     * - The substring must be formatted as `(0x)?[0-9a-fA-F]{40}`\n     */\n    function parseAddress(string memory input, uint256 begin, uint256 end) internal pure returns (address) {\n        (bool success, address value) = tryParseAddress(input, begin, end);\n        if (!success) revert StringsInvalidAddressFormat();\n        return value;\n    }\n\n    /**\n     * @dev Variant of {parseAddress-string} that returns false if the parsing fails because the input is not a properly\n     * formatted address. See {parseAddress-string} requirements.\n     */\n    function tryParseAddress(string memory input) internal pure returns (bool success, address value) {\n        return tryParseAddress(input, 0, bytes(input).length);\n    }\n\n    /**\n     * @dev Variant of {parseAddress-string-uint256-uint256} that returns false if the parsing fails because input is not a properly\n     * formatted address. See {parseAddress-string-uint256-uint256} requirements.\n     */\n    function tryParseAddress(\n        string memory input,\n        uint256 begin,\n        uint256 end\n    ) internal pure returns (bool success, address value) {\n        if (end > bytes(input).length || begin > end) return (false, address(0));\n\n        bool hasPrefix = (end > begin + 1) && bytes2(_unsafeReadBytesOffset(bytes(input), begin)) == bytes2(\"0x\"); // don't do out-of-bound (possibly unsafe) read if sub-string is empty\n        uint256 expectedLength = 40 + hasPrefix.toUint() * 2;\n\n        // check that input is the correct length\n        if (end - begin == expectedLength) {\n            // length guarantees that this does not overflow, and value is at most type(uint160).max\n            (bool s, uint256 v) = _tryParseHexUintUncheckedBounds(input, begin, end);\n            return (s, address(uint160(v)));\n        } else {\n            return (false, address(0));\n        }\n    }\n\n    function _tryParseChr(bytes1 chr) private pure returns (uint8) {\n        uint8 value = uint8(chr);\n\n        // Try to parse `chr`:\n        // - Case 1: [0-9]\n        // - Case 2: [a-f]\n        // - Case 3: [A-F]\n        // - otherwise not supported\n        unchecked {\n            if (value > 47 && value < 58) value -= 48;\n            else if (value > 96 && value < 103) value -= 87;\n            else if (value > 64 && value < 71) value -= 55;\n            else return type(uint8).max;\n        }\n\n        return value;\n    }\n\n    /**\n     * @dev Escape special characters in JSON strings. This can be useful to prevent JSON injection in NFT metadata.\n     *\n     * WARNING: This function should only be used in double quoted JSON strings. Single quotes are not escaped.\n     *\n     * NOTE: This function escapes all unicode characters, and not just the ones in ranges defined in section 2.5 of\n     * RFC-4627 (U+0000 to U+001F, U+0022 and U+005C). ECMAScript's `JSON.parse` does recover escaped unicode\n     * characters that are not in this range, but other tooling may provide different results.\n     */\n    function escapeJSON(string memory input) internal pure returns (string memory) {\n        bytes memory buffer = bytes(input);\n        bytes memory output = new bytes(2 * buffer.length); // worst case scenario\n        uint256 outputLength = 0;\n\n        for (uint256 i; i < buffer.length; ++i) {\n            bytes1 char = bytes1(_unsafeReadBytesOffset(buffer, i));\n            if (((SPECIAL_CHARS_LOOKUP & (1 << uint8(char))) != 0)) {\n                output[outputLength++] = \"\\\\\";\n                if (char == 0x08) output[outputLength++] = \"b\";\n                else if (char == 0x09) output[outputLength++] = \"t\";\n                else if (char == 0x0a) output[outputLength++] = \"n\";\n                else if (char == 0x0c) output[outputLength++] = \"f\";\n                else if (char == 0x0d) output[outputLength++] = \"r\";\n                else if (char == 0x5c) output[outputLength++] = \"\\\\\";\n                else if (char == 0x22) {\n                    // solhint-disable-next-line quotes\n                    output[outputLength++] = '\"';\n                }\n            } else {\n                output[outputLength++] = char;\n            }\n        }\n        // write the actual length and deallocate unused memory\n        assembly (\"memory-safe\") {\n            mstore(output, outputLength)\n            mstore(0x40, add(output, shl(5, shr(5, add(outputLength, 63)))))\n        }\n\n        return string(output);\n    }\n\n    /**\n     * @dev Reads a bytes32 from a bytes array without bounds checking.\n     *\n     * NOTE: making this function internal would mean it could be used with memory unsafe offset, and marking the\n     * assembly block as such would prevent some optimizations.\n     */\n    function _unsafeReadBytesOffset(bytes memory buffer, uint256 offset) private pure returns (bytes32 value) {\n        // This is not memory safe in the general case, but all calls to this private function are within bounds.\n        assembly (\"memory-safe\") {\n            value := mload(add(add(buffer, 0x20), offset))\n        }\n    }\n}\n"
      },
      "contracts/SoulboundToken.sol": {
        "content": "// SPDX-License-Identifier: FSL-1.1-MIT\n// SettleMint.com\n\npragma solidity ^0.8.24;\n\nimport { UUPSUpgradeable } from \"@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol\";\nimport { OwnableUpgradeable } from \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\nimport { Strings } from \"@openzeppelin/contracts/utils/Strings.sol\";\nimport {\n    ERC1155SupplyUpgradeable,\n    ERC1155Upgradeable\n} from \"@openzeppelin/contracts-upgradeable/token/ERC1155/extensions/ERC1155SupplyUpgradeable.sol\";\nimport { AccessControlUpgradeable } from \"@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol\";\nimport { PausableUpgradeable, Initializable } from \"@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol\";\n\ncontract Soulbound is\n    Initializable,\n    UUPSUpgradeable,\n    ERC1155SupplyUpgradeable,\n    AccessControlUpgradeable,\n    PausableUpgradeable\n{\n    using Strings for uint256;\n    //using CountersUpgradeable for CountersUpgradeable.Counter;\n\n    uint256 _tokenIdCounter;\n\n    bytes32 public constant MINTER_ROLE = keccak256(\"MINTER_ROLE\");\n\n    string public name;\n    string public symbol;\n\n    function initialize(string memory name_, string memory symbol_, string memory uri_) external initializer {\n        __ERC1155_init(uri_);\n        __AccessControl_init();\n        _grantRole(DEFAULT_ADMIN_ROLE, msg.sender);\n        name = name_;\n        symbol = symbol_;\n    }\n\n    function _update(\n        address from,\n        address to,\n        uint256[] memory ids,\n        uint256[] memory values\n    )\n        internal\n        override(ERC1155SupplyUpgradeable)\n    {\n        require(from == address(0) || to == address(0), \"A Soulbound token cannot be transferred\");\n        super._update(from, to, ids, values);\n    }\n\n    function getCurrentTokenId() external view returns (uint256) {\n        return _tokenIdCounter;\n    }\n\n    function pause() public virtual {\n        require(hasRole(DEFAULT_ADMIN_ROLE, msg.sender), \"Caller is not an admin role authorised\");\n        _pause();\n    }\n\n    function unpause() public virtual {\n        require(hasRole(DEFAULT_ADMIN_ROLE, msg.sender), \"Caller is not an admin role authorised\");\n        _unpause();\n    }\n\n    function mint(uint256 amounts, address recipient) external {\n        require(hasRole(MINTER_ROLE, msg.sender), \"Caller is not a minter\");\n        _tokenIdCounter++;\n        _mint(recipient, _tokenIdCounter, amounts, \"\");\n    }\n\n    function mintBatch(uint256[] memory amounts, address recipient) public {\n        uint256[] memory tokenIdsArray = new uint256[](amounts.length);\n        require(hasRole(MINTER_ROLE, msg.sender), \"Caller is not a minter\");\n        for (uint256 i = 0; i < amounts.length; ++i) {\n            _tokenIdCounter++;\n            uint256 tokenId = _tokenIdCounter;\n            tokenIdsArray[i] = tokenId;\n        }\n        _mintBatch(recipient, tokenIdsArray, amounts, \"\");\n    }\n\n    function burn(uint256 tokenId, uint256 amounts) external {\n        _burn(msg.sender, tokenId, amounts);\n    }\n\n    function burnBatch(uint256[] memory tokenIds, uint256[] memory amounts) external {\n        _burnBatch(msg.sender, tokenIds, amounts);\n    }\n\n    function setURI(string memory newuri) external {\n        require(hasRole(DEFAULT_ADMIN_ROLE, msg.sender), \"Caller is not an admin role authorised\");\n        _setURI(newuri);\n    }\n\n    function uri(uint256 id) public view override returns (string memory) {\n        return string(abi.encodePacked(super.uri(id), id.toString(), \".json\"));\n    }\n\n    function setApprovalForAll(address operator, bool approved) public virtual override {\n        _setApprovalForAll(msg.sender, operator, approved);\n    }\n\n    function supportsInterface(bytes4 interfaceId)\n        public\n        view\n        virtual\n        override(ERC1155Upgradeable, AccessControlUpgradeable)\n        returns (bool)\n    {\n        return interfaceId == type(OwnableUpgradeable).interfaceId || super.supportsInterface(interfaceId);\n    }\n\n    /* ========== RESTRICTED FUNCTIONS ========== */\n    function _authorizeUpgrade(address newImplementation) internal override { }\n}\n"
      }
    },
    "settings": {
      "viaIR": true,
      "optimizer": {
        "enabled": true,
        "runs": 10000
      },
      "evmVersion": "paris",
      "outputSelection": {
        "*": {
          "*": [
            "abi",
            "evm.bytecode",
            "evm.deployedBytecode",
            "evm.methodIdentifiers",
            "metadata"
          ],
          "": [
            "ast"
          ]
        }
      }
    }
  },
  "output": {
    "sources": {
      "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol",
          "exportedSymbols": {
            "AccessControlUpgradeable": [
              364
            ],
            "ContextUpgradeable": [
              2291
            ],
            "ERC165Upgradeable": [
              2491
            ],
            "IAccessControl": [
              2574
            ],
            "IERC165": [
              6393
            ],
            "Initializable": [
              827
            ]
          },
          "id": 365,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 1,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".20"
              ],
              "nodeType": "PragmaDirective",
              "src": "108:24:0"
            },
            {
              "absolutePath": "@openzeppelin/contracts/access/IAccessControl.sol",
              "file": "@openzeppelin/contracts/access/IAccessControl.sol",
              "id": 3,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 365,
              "sourceUnit": 2575,
              "src": "134:81:0",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 2,
                    "name": "IAccessControl",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2574,
                    "src": "142:14:0",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol",
              "file": "../utils/ContextUpgradeable.sol",
              "id": 5,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 365,
              "sourceUnit": 2292,
              "src": "216:67:0",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 4,
                    "name": "ContextUpgradeable",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2291,
                    "src": "224:18:0",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/utils/introspection/IERC165.sol",
              "file": "@openzeppelin/contracts/utils/introspection/IERC165.sol",
              "id": 7,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 365,
              "sourceUnit": 6394,
              "src": "284:80:0",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 6,
                    "name": "IERC165",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 6393,
                    "src": "292:7:0",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol",
              "file": "../utils/introspection/ERC165Upgradeable.sol",
              "id": 9,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 365,
              "sourceUnit": 2492,
              "src": "365:79:0",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 8,
                    "name": "ERC165Upgradeable",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2491,
                    "src": "373:17:0",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol",
              "file": "../proxy/utils/Initializable.sol",
              "id": 11,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 365,
              "sourceUnit": 828,
              "src": "445:63:0",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 10,
                    "name": "Initializable",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 827,
                    "src": "453:13:0",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "abstract": true,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 13,
                    "name": "Initializable",
                    "nameLocations": [
                      "2217:13:0"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 827,
                    "src": "2217:13:0"
                  },
                  "id": 14,
                  "nodeType": "InheritanceSpecifier",
                  "src": "2217:13:0"
                },
                {
                  "baseName": {
                    "id": 15,
                    "name": "ContextUpgradeable",
                    "nameLocations": [
                      "2232:18:0"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 2291,
                    "src": "2232:18:0"
                  },
                  "id": 16,
                  "nodeType": "InheritanceSpecifier",
                  "src": "2232:18:0"
                },
                {
                  "baseName": {
                    "id": 17,
                    "name": "IAccessControl",
                    "nameLocations": [
                      "2252:14:0"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 2574,
                    "src": "2252:14:0"
                  },
                  "id": 18,
                  "nodeType": "InheritanceSpecifier",
                  "src": "2252:14:0"
                },
                {
                  "baseName": {
                    "id": 19,
                    "name": "ERC165Upgradeable",
                    "nameLocations": [
                      "2268:17:0"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 2491,
                    "src": "2268:17:0"
                  },
                  "id": 20,
                  "nodeType": "InheritanceSpecifier",
                  "src": "2268:17:0"
                }
              ],
              "canonicalName": "AccessControlUpgradeable",
              "contractDependencies": [],
              "contractKind": "contract",
              "documentation": {
                "id": 12,
                "nodeType": "StructuredDocumentation",
                "src": "510:1660:0",
                "text": " @dev Contract module that allows children to implement role-based access\n control mechanisms. This is a lightweight version that doesn't allow enumerating role\n members except through off-chain means by accessing the contract event logs. Some\n applications may benefit from on-chain enumerability, for those cases see\n {AccessControlEnumerable}.\n Roles are referred to by their `bytes32` identifier. These should be exposed\n in the external API and be unique. The best way to achieve this is by\n using `public constant` hash digests:\n ```solidity\n bytes32 public constant MY_ROLE = keccak256(\"MY_ROLE\");\n ```\n Roles can be used to represent a set of permissions. To restrict access to a\n function call, use {hasRole}:\n ```solidity\n function foo() public {\n     require(hasRole(MY_ROLE, msg.sender));\n     ...\n }\n ```\n Roles can be granted and revoked dynamically via the {grantRole} and\n {revokeRole} functions. Each role has an associated admin role, and only\n accounts that have a role's admin role can call {grantRole} and {revokeRole}.\n By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means\n that only accounts with this role will be able to grant or revoke other\n roles. More complex role relationships can be created by using\n {_setRoleAdmin}.\n WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to\n grant and revoke this role. Extra precautions should be taken to secure\n accounts that have been granted it. We recommend using {AccessControlDefaultAdminRules}\n to enforce additional security measures for this role."
              },
              "fullyImplemented": true,
              "id": 364,
              "linearizedBaseContracts": [
                364,
                2491,
                6393,
                2574,
                2291,
                827
              ],
              "name": "AccessControlUpgradeable",
              "nameLocation": "2189:24:0",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "canonicalName": "AccessControlUpgradeable.RoleData",
                  "id": 27,
                  "members": [
                    {
                      "constant": false,
                      "id": 24,
                      "mutability": "mutable",
                      "name": "hasRole",
                      "nameLocation": "2351:7:0",
                      "nodeType": "VariableDeclaration",
                      "scope": 27,
                      "src": "2318:40:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                        "typeString": "mapping(address => bool)"
                      },
                      "typeName": {
                        "id": 23,
                        "keyName": "account",
                        "keyNameLocation": "2334:7:0",
                        "keyType": {
                          "id": 21,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2326:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "Mapping",
                        "src": "2318:32:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                          "typeString": "mapping(address => bool)"
                        },
                        "valueName": "",
                        "valueNameLocation": "-1:-1:-1",
                        "valueType": {
                          "id": 22,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "2345:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 26,
                      "mutability": "mutable",
                      "name": "adminRole",
                      "nameLocation": "2376:9:0",
                      "nodeType": "VariableDeclaration",
                      "scope": 27,
                      "src": "2368:17:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 25,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "2368:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "name": "RoleData",
                  "nameLocation": "2299:8:0",
                  "nodeType": "StructDefinition",
                  "scope": 364,
                  "src": "2292:100:0",
                  "visibility": "public"
                },
                {
                  "constant": true,
                  "functionSelector": "a217fddf",
                  "id": 30,
                  "mutability": "constant",
                  "name": "DEFAULT_ADMIN_ROLE",
                  "nameLocation": "2422:18:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 364,
                  "src": "2398:49:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 28,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2398:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": {
                    "hexValue": "30783030",
                    "id": 29,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2443:4:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0x00"
                  },
                  "visibility": "public"
                },
                {
                  "canonicalName": "AccessControlUpgradeable.AccessControlStorage",
                  "documentation": {
                    "id": 31,
                    "nodeType": "StructuredDocumentation",
                    "src": "2455:71:0",
                    "text": "@custom:storage-location erc7201:openzeppelin.storage.AccessControl"
                  },
                  "id": 37,
                  "members": [
                    {
                      "constant": false,
                      "id": 36,
                      "mutability": "mutable",
                      "name": "_roles",
                      "nameLocation": "2603:6:0",
                      "nodeType": "VariableDeclaration",
                      "scope": 37,
                      "src": "2569:40:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_RoleData_$27_storage_$",
                        "typeString": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)"
                      },
                      "typeName": {
                        "id": 35,
                        "keyName": "role",
                        "keyNameLocation": "2585:4:0",
                        "keyType": {
                          "id": 32,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2577:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "Mapping",
                        "src": "2569:33:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_RoleData_$27_storage_$",
                          "typeString": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)"
                        },
                        "valueName": "",
                        "valueNameLocation": "-1:-1:-1",
                        "valueType": {
                          "id": 34,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 33,
                            "name": "RoleData",
                            "nameLocations": [
                              "2593:8:0"
                            ],
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 27,
                            "src": "2593:8:0"
                          },
                          "referencedDeclaration": 27,
                          "src": "2593:8:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RoleData_$27_storage_ptr",
                            "typeString": "struct AccessControlUpgradeable.RoleData"
                          }
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "name": "AccessControlStorage",
                  "nameLocation": "2538:20:0",
                  "nodeType": "StructDefinition",
                  "scope": 364,
                  "src": "2531:85:0",
                  "visibility": "public"
                },
                {
                  "constant": true,
                  "id": 40,
                  "mutability": "constant",
                  "name": "AccessControlStorageLocation",
                  "nameLocation": "2764:28:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 364,
                  "src": "2739:122:0",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 38,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2739:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": {
                    "hexValue": "307830326464376263376465633464636565646461373735653538646435343165303861313136633663353338313563306264303238313932663762363236383030",
                    "id": 39,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2795:66:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_1295953201772911215391058989745868821651057887752387839782086074958115661824_by_1",
                      "typeString": "int_const 1295...(68 digits omitted)...1824"
                    },
                    "value": "0x02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800"
                  },
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 47,
                    "nodeType": "Block",
                    "src": "2958:87:0",
                    "statements": [
                      {
                        "AST": {
                          "nativeSrc": "2977:62:0",
                          "nodeType": "YulBlock",
                          "src": "2977:62:0",
                          "statements": [
                            {
                              "nativeSrc": "2991:38:0",
                              "nodeType": "YulAssignment",
                              "src": "2991:38:0",
                              "value": {
                                "name": "AccessControlStorageLocation",
                                "nativeSrc": "3001:28:0",
                                "nodeType": "YulIdentifier",
                                "src": "3001:28:0"
                              },
                              "variableNames": [
                                {
                                  "name": "$.slot",
                                  "nativeSrc": "2991:6:0",
                                  "nodeType": "YulIdentifier",
                                  "src": "2991:6:0"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "paris",
                        "externalReferences": [
                          {
                            "declaration": 44,
                            "isOffset": false,
                            "isSlot": true,
                            "src": "2991:6:0",
                            "suffix": "slot",
                            "valueSize": 1
                          },
                          {
                            "declaration": 40,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "3001:28:0",
                            "valueSize": 1
                          }
                        ],
                        "id": 46,
                        "nodeType": "InlineAssembly",
                        "src": "2968:71:0"
                      }
                    ]
                  },
                  "id": 48,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_getAccessControlStorage",
                  "nameLocation": "2877:24:0",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 41,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2901:2:0"
                  },
                  "returnParameters": {
                    "id": 45,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 44,
                        "mutability": "mutable",
                        "name": "$",
                        "nameLocation": "2955:1:0",
                        "nodeType": "VariableDeclaration",
                        "scope": 48,
                        "src": "2926:30:0",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AccessControlStorage_$37_storage_ptr",
                          "typeString": "struct AccessControlUpgradeable.AccessControlStorage"
                        },
                        "typeName": {
                          "id": 43,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 42,
                            "name": "AccessControlStorage",
                            "nameLocations": [
                              "2926:20:0"
                            ],
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 37,
                            "src": "2926:20:0"
                          },
                          "referencedDeclaration": 37,
                          "src": "2926:20:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_AccessControlStorage_$37_storage_ptr",
                            "typeString": "struct AccessControlUpgradeable.AccessControlStorage"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2925:32:0"
                  },
                  "scope": 364,
                  "src": "2868:177:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 58,
                    "nodeType": "Block",
                    "src": "3262:44:0",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 54,
                              "name": "role",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 51,
                              "src": "3283:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 53,
                            "name": "_checkRole",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              131,
                              152
                            ],
                            "referencedDeclaration": 131,
                            "src": "3272:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$__$",
                              "typeString": "function (bytes32) view"
                            }
                          },
                          "id": 55,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3272:16:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 56,
                        "nodeType": "ExpressionStatement",
                        "src": "3272:16:0"
                      },
                      {
                        "id": 57,
                        "nodeType": "PlaceholderStatement",
                        "src": "3298:1:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 49,
                    "nodeType": "StructuredDocumentation",
                    "src": "3051:174:0",
                    "text": " @dev Modifier that checks that an account has a specific role. Reverts\n with an {AccessControlUnauthorizedAccount} error including the required role."
                  },
                  "id": 59,
                  "name": "onlyRole",
                  "nameLocation": "3239:8:0",
                  "nodeType": "ModifierDefinition",
                  "parameters": {
                    "id": 52,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 51,
                        "mutability": "mutable",
                        "name": "role",
                        "nameLocation": "3256:4:0",
                        "nodeType": "VariableDeclaration",
                        "scope": 59,
                        "src": "3248:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 50,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "3248:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3247:14:0"
                  },
                  "src": "3230:76:0",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 64,
                    "nodeType": "Block",
                    "src": "3370:7:0",
                    "statements": []
                  },
                  "id": 65,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 62,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 61,
                        "name": "onlyInitializing",
                        "nameLocations": [
                          "3353:16:0"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 722,
                        "src": "3353:16:0"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "3353:16:0"
                    }
                  ],
                  "name": "__AccessControl_init",
                  "nameLocation": "3321:20:0",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 60,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3341:2:0"
                  },
                  "returnParameters": {
                    "id": 63,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3370:0:0"
                  },
                  "scope": 364,
                  "src": "3312:65:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 70,
                    "nodeType": "Block",
                    "src": "3451:7:0",
                    "statements": []
                  },
                  "id": 71,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 68,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 67,
                        "name": "onlyInitializing",
                        "nameLocations": [
                          "3434:16:0"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 722,
                        "src": "3434:16:0"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "3434:16:0"
                    }
                  ],
                  "name": "__AccessControl_init_unchained",
                  "nameLocation": "3392:30:0",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 66,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3422:2:0"
                  },
                  "returnParameters": {
                    "id": 69,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3451:0:0"
                  },
                  "scope": 364,
                  "src": "3383:75:0",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    2490
                  ],
                  "body": {
                    "id": 92,
                    "nodeType": "Block",
                    "src": "3582:111:0",
                    "statements": [
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 90,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            },
                            "id": 85,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 80,
                              "name": "interfaceId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 74,
                              "src": "3599:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 82,
                                    "name": "IAccessControl",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2574,
                                    "src": "3619:14:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_IAccessControl_$2574_$",
                                      "typeString": "type(contract IAccessControl)"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_type$_t_contract$_IAccessControl_$2574_$",
                                      "typeString": "type(contract IAccessControl)"
                                    }
                                  ],
                                  "id": 81,
                                  "name": "type",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -27,
                                  "src": "3614:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                    "typeString": "function () pure"
                                  }
                                },
                                "id": 83,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3614:20:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_meta_type_t_contract$_IAccessControl_$2574",
                                  "typeString": "type(contract IAccessControl)"
                                }
                              },
                              "id": 84,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberLocation": "3635:11:0",
                              "memberName": "interfaceId",
                              "nodeType": "MemberAccess",
                              "src": "3614:32:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              }
                            },
                            "src": "3599:47:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "||",
                          "rightExpression": {
                            "arguments": [
                              {
                                "id": 88,
                                "name": "interfaceId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 74,
                                "src": "3674:11:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              ],
                              "expression": {
                                "id": 86,
                                "name": "super",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -25,
                                "src": "3650:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_super$_AccessControlUpgradeable_$364_$",
                                  "typeString": "type(contract super AccessControlUpgradeable)"
                                }
                              },
                              "id": 87,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "3656:17:0",
                              "memberName": "supportsInterface",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 2490,
                              "src": "3650:23:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_bytes4_$returns$_t_bool_$",
                                "typeString": "function (bytes4) view returns (bool)"
                              }
                            },
                            "id": 89,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3650:36:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "3599:87:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 79,
                        "id": 91,
                        "nodeType": "Return",
                        "src": "3592:94:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 72,
                    "nodeType": "StructuredDocumentation",
                    "src": "3463:23:0",
                    "text": "@inheritdoc IERC165"
                  },
                  "functionSelector": "01ffc9a7",
                  "id": 93,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "supportsInterface",
                  "nameLocation": "3500:17:0",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 76,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "3558:8:0"
                  },
                  "parameters": {
                    "id": 75,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 74,
                        "mutability": "mutable",
                        "name": "interfaceId",
                        "nameLocation": "3525:11:0",
                        "nodeType": "VariableDeclaration",
                        "scope": 93,
                        "src": "3518:18:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "typeName": {
                          "id": 73,
                          "name": "bytes4",
                          "nodeType": "ElementaryTypeName",
                          "src": "3518:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3517:20:0"
                  },
                  "returnParameters": {
                    "id": 79,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 78,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 93,
                        "src": "3576:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 77,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "3576:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3575:6:0"
                  },
                  "scope": 364,
                  "src": "3491:202:0",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    2541
                  ],
                  "body": {
                    "id": 117,
                    "nodeType": "Block",
                    "src": "3863:124:0",
                    "statements": [
                      {
                        "assignments": [
                          105
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 105,
                            "mutability": "mutable",
                            "name": "$",
                            "nameLocation": "3902:1:0",
                            "nodeType": "VariableDeclaration",
                            "scope": 117,
                            "src": "3873:30:0",
                            "stateVariable": false,
                            "storageLocation": "storage",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_AccessControlStorage_$37_storage_ptr",
                              "typeString": "struct AccessControlUpgradeable.AccessControlStorage"
                            },
                            "typeName": {
                              "id": 104,
                              "nodeType": "UserDefinedTypeName",
                              "pathNode": {
                                "id": 103,
                                "name": "AccessControlStorage",
                                "nameLocations": [
                                  "3873:20:0"
                                ],
                                "nodeType": "IdentifierPath",
                                "referencedDeclaration": 37,
                                "src": "3873:20:0"
                              },
                              "referencedDeclaration": 37,
                              "src": "3873:20:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_AccessControlStorage_$37_storage_ptr",
                                "typeString": "struct AccessControlUpgradeable.AccessControlStorage"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 108,
                        "initialValue": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 106,
                            "name": "_getAccessControlStorage",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 48,
                            "src": "3906:24:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_AccessControlStorage_$37_storage_ptr_$",
                              "typeString": "function () pure returns (struct AccessControlUpgradeable.AccessControlStorage storage pointer)"
                            }
                          },
                          "id": 107,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3906:26:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_AccessControlStorage_$37_storage_ptr",
                            "typeString": "struct AccessControlUpgradeable.AccessControlStorage storage pointer"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3873:59:0"
                      },
                      {
                        "expression": {
                          "baseExpression": {
                            "expression": {
                              "baseExpression": {
                                "expression": {
                                  "id": 109,
                                  "name": "$",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 105,
                                  "src": "3949:1:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_AccessControlStorage_$37_storage_ptr",
                                    "typeString": "struct AccessControlUpgradeable.AccessControlStorage storage pointer"
                                  }
                                },
                                "id": 110,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "3951:6:0",
                                "memberName": "_roles",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 36,
                                "src": "3949:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_RoleData_$27_storage_$",
                                  "typeString": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData storage ref)"
                                }
                              },
                              "id": 112,
                              "indexExpression": {
                                "id": 111,
                                "name": "role",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 96,
                                "src": "3958:4:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "3949:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_RoleData_$27_storage",
                                "typeString": "struct AccessControlUpgradeable.RoleData storage ref"
                              }
                            },
                            "id": 113,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "3964:7:0",
                            "memberName": "hasRole",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 24,
                            "src": "3949:22:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                              "typeString": "mapping(address => bool)"
                            }
                          },
                          "id": 115,
                          "indexExpression": {
                            "id": 114,
                            "name": "account",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 98,
                            "src": "3972:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "3949:31:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 102,
                        "id": 116,
                        "nodeType": "Return",
                        "src": "3942:38:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 94,
                    "nodeType": "StructuredDocumentation",
                    "src": "3699:76:0",
                    "text": " @dev Returns `true` if `account` has been granted `role`."
                  },
                  "functionSelector": "91d14854",
                  "id": 118,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "hasRole",
                  "nameLocation": "3789:7:0",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 99,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 96,
                        "mutability": "mutable",
                        "name": "role",
                        "nameLocation": "3805:4:0",
                        "nodeType": "VariableDeclaration",
                        "scope": 118,
                        "src": "3797:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 95,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "3797:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 98,
                        "mutability": "mutable",
                        "name": "account",
                        "nameLocation": "3819:7:0",
                        "nodeType": "VariableDeclaration",
                        "scope": 118,
                        "src": "3811:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 97,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3811:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3796:31:0"
                  },
                  "returnParameters": {
                    "id": 102,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 101,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 118,
                        "src": "3857:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 100,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "3857:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3856:6:0"
                  },
                  "scope": 364,
                  "src": "3780:207:0",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 130,
                    "nodeType": "Block",
                    "src": "4252:47:0",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 125,
                              "name": "role",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 121,
                              "src": "4273:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 126,
                                "name": "_msgSender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2273,
                                "src": "4279:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                  "typeString": "function () view returns (address)"
                                }
                              },
                              "id": 127,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4279:12:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 124,
                            "name": "_checkRole",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              131,
                              152
                            ],
                            "referencedDeclaration": 152,
                            "src": "4262:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_address_$returns$__$",
                              "typeString": "function (bytes32,address) view"
                            }
                          },
                          "id": 128,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4262:30:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 129,
                        "nodeType": "ExpressionStatement",
                        "src": "4262:30:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 119,
                    "nodeType": "StructuredDocumentation",
                    "src": "3993:198:0",
                    "text": " @dev Reverts with an {AccessControlUnauthorizedAccount} error if `_msgSender()`\n is missing `role`. Overriding this function changes the behavior of the {onlyRole} modifier."
                  },
                  "id": 131,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_checkRole",
                  "nameLocation": "4205:10:0",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 122,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 121,
                        "mutability": "mutable",
                        "name": "role",
                        "nameLocation": "4224:4:0",
                        "nodeType": "VariableDeclaration",
                        "scope": 131,
                        "src": "4216:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 120,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "4216:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4215:14:0"
                  },
                  "returnParameters": {
                    "id": 123,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "4252:0:0"
                  },
                  "scope": 364,
                  "src": "4196:103:0",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 151,
                    "nodeType": "Block",
                    "src": "4502:124:0",
                    "statements": [
                      {
                        "condition": {
                          "id": 143,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "4516:23:0",
                          "subExpression": {
                            "arguments": [
                              {
                                "id": 140,
                                "name": "role",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 134,
                                "src": "4525:4:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              {
                                "id": 141,
                                "name": "account",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 136,
                                "src": "4531:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 139,
                              "name": "hasRole",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 118,
                              "src": "4517:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$",
                                "typeString": "function (bytes32,address) view returns (bool)"
                              }
                            },
                            "id": 142,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4517:22:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 150,
                        "nodeType": "IfStatement",
                        "src": "4512:108:0",
                        "trueBody": {
                          "id": 149,
                          "nodeType": "Block",
                          "src": "4541:79:0",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "id": 145,
                                    "name": "account",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 136,
                                    "src": "4595:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "id": 146,
                                    "name": "role",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 134,
                                    "src": "4604:4:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  ],
                                  "id": 144,
                                  "name": "AccessControlUnauthorizedAccount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2501,
                                  "src": "4562:32:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_address_$_t_bytes32_$returns$_t_error_$",
                                    "typeString": "function (address,bytes32) pure returns (error)"
                                  }
                                },
                                "id": 147,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4562:47:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 148,
                              "nodeType": "RevertStatement",
                              "src": "4555:54:0"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 132,
                    "nodeType": "StructuredDocumentation",
                    "src": "4305:119:0",
                    "text": " @dev Reverts with an {AccessControlUnauthorizedAccount} error if `account`\n is missing `role`."
                  },
                  "id": 152,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_checkRole",
                  "nameLocation": "4438:10:0",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 137,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 134,
                        "mutability": "mutable",
                        "name": "role",
                        "nameLocation": "4457:4:0",
                        "nodeType": "VariableDeclaration",
                        "scope": 152,
                        "src": "4449:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 133,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "4449:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 136,
                        "mutability": "mutable",
                        "name": "account",
                        "nameLocation": "4471:7:0",
                        "nodeType": "VariableDeclaration",
                        "scope": 152,
                        "src": "4463:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 135,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4463:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4448:31:0"
                  },
                  "returnParameters": {
                    "id": 138,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "4502:0:0"
                  },
                  "scope": 364,
                  "src": "4429:197:0",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    2549
                  ],
                  "body": {
                    "id": 172,
                    "nodeType": "Block",
                    "src": "4881:117:0",
                    "statements": [
                      {
                        "assignments": [
                          162
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 162,
                            "mutability": "mutable",
                            "name": "$",
                            "nameLocation": "4920:1:0",
                            "nodeType": "VariableDeclaration",
                            "scope": 172,
                            "src": "4891:30:0",
                            "stateVariable": false,
                            "storageLocation": "storage",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_AccessControlStorage_$37_storage_ptr",
                              "typeString": "struct AccessControlUpgradeable.AccessControlStorage"
                            },
                            "typeName": {
                              "id": 161,
                              "nodeType": "UserDefinedTypeName",
                              "pathNode": {
                                "id": 160,
                                "name": "AccessControlStorage",
                                "nameLocations": [
                                  "4891:20:0"
                                ],
                                "nodeType": "IdentifierPath",
                                "referencedDeclaration": 37,
                                "src": "4891:20:0"
                              },
                              "referencedDeclaration": 37,
                              "src": "4891:20:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_AccessControlStorage_$37_storage_ptr",
                                "typeString": "struct AccessControlUpgradeable.AccessControlStorage"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 165,
                        "initialValue": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 163,
                            "name": "_getAccessControlStorage",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 48,
                            "src": "4924:24:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_AccessControlStorage_$37_storage_ptr_$",
                              "typeString": "function () pure returns (struct AccessControlUpgradeable.AccessControlStorage storage pointer)"
                            }
                          },
                          "id": 164,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4924:26:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_AccessControlStorage_$37_storage_ptr",
                            "typeString": "struct AccessControlUpgradeable.AccessControlStorage storage pointer"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4891:59:0"
                      },
                      {
                        "expression": {
                          "expression": {
                            "baseExpression": {
                              "expression": {
                                "id": 166,
                                "name": "$",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 162,
                                "src": "4967:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_AccessControlStorage_$37_storage_ptr",
                                  "typeString": "struct AccessControlUpgradeable.AccessControlStorage storage pointer"
                                }
                              },
                              "id": 167,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "4969:6:0",
                              "memberName": "_roles",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 36,
                              "src": "4967:8:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_RoleData_$27_storage_$",
                                "typeString": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData storage ref)"
                              }
                            },
                            "id": 169,
                            "indexExpression": {
                              "id": 168,
                              "name": "role",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 155,
                              "src": "4976:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "4967:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RoleData_$27_storage",
                              "typeString": "struct AccessControlUpgradeable.RoleData storage ref"
                            }
                          },
                          "id": 170,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "4982:9:0",
                          "memberName": "adminRole",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 26,
                          "src": "4967:24:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "functionReturnParameters": 159,
                        "id": 171,
                        "nodeType": "Return",
                        "src": "4960:31:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 153,
                    "nodeType": "StructuredDocumentation",
                    "src": "4632:170:0",
                    "text": " @dev Returns the admin role that controls `role`. See {grantRole} and\n {revokeRole}.\n To change a role's admin, use {_setRoleAdmin}."
                  },
                  "functionSelector": "248a9ca3",
                  "id": 173,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getRoleAdmin",
                  "nameLocation": "4816:12:0",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 156,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 155,
                        "mutability": "mutable",
                        "name": "role",
                        "nameLocation": "4837:4:0",
                        "nodeType": "VariableDeclaration",
                        "scope": 173,
                        "src": "4829:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 154,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "4829:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4828:14:0"
                  },
                  "returnParameters": {
                    "id": 159,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 158,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 173,
                        "src": "4872:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 157,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "4872:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4871:9:0"
                  },
                  "scope": 364,
                  "src": "4807:191:0",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    2557
                  ],
                  "body": {
                    "id": 191,
                    "nodeType": "Block",
                    "src": "5388:42:0",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 187,
                              "name": "role",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 176,
                              "src": "5409:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "id": 188,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 178,
                              "src": "5415:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 186,
                            "name": "_grantRole",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 317,
                            "src": "5398:10:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$_t_bool_$",
                              "typeString": "function (bytes32,address) returns (bool)"
                            }
                          },
                          "id": 189,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5398:25:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 190,
                        "nodeType": "ExpressionStatement",
                        "src": "5398:25:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 174,
                    "nodeType": "StructuredDocumentation",
                    "src": "5004:285:0",
                    "text": " @dev Grants `role` to `account`.\n If `account` had not been already granted `role`, emits a {RoleGranted}\n event.\n Requirements:\n - the caller must have ``role``'s admin role.\n May emit a {RoleGranted} event."
                  },
                  "functionSelector": "2f2ff15d",
                  "id": 192,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "arguments": [
                            {
                              "id": 182,
                              "name": "role",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 176,
                              "src": "5381:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 181,
                            "name": "getRoleAdmin",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 173,
                            "src": "5368:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bytes32_$",
                              "typeString": "function (bytes32) view returns (bytes32)"
                            }
                          },
                          "id": 183,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5368:18:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "id": 184,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 180,
                        "name": "onlyRole",
                        "nameLocations": [
                          "5359:8:0"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 59,
                        "src": "5359:8:0"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "5359:28:0"
                    }
                  ],
                  "name": "grantRole",
                  "nameLocation": "5303:9:0",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 179,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 176,
                        "mutability": "mutable",
                        "name": "role",
                        "nameLocation": "5321:4:0",
                        "nodeType": "VariableDeclaration",
                        "scope": 192,
                        "src": "5313:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 175,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "5313:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 178,
                        "mutability": "mutable",
                        "name": "account",
                        "nameLocation": "5335:7:0",
                        "nodeType": "VariableDeclaration",
                        "scope": 192,
                        "src": "5327:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 177,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5327:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5312:31:0"
                  },
                  "returnParameters": {
                    "id": 185,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "5388:0:0"
                  },
                  "scope": 364,
                  "src": "5294:136:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    2565
                  ],
                  "body": {
                    "id": 210,
                    "nodeType": "Block",
                    "src": "5805:43:0",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 206,
                              "name": "role",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 195,
                              "src": "5827:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "id": 207,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 197,
                              "src": "5833:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 205,
                            "name": "_revokeRole",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 363,
                            "src": "5815:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$_t_bool_$",
                              "typeString": "function (bytes32,address) returns (bool)"
                            }
                          },
                          "id": 208,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5815:26:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 209,
                        "nodeType": "ExpressionStatement",
                        "src": "5815:26:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 193,
                    "nodeType": "StructuredDocumentation",
                    "src": "5436:269:0",
                    "text": " @dev Revokes `role` from `account`.\n If `account` had been granted `role`, emits a {RoleRevoked} event.\n Requirements:\n - the caller must have ``role``'s admin role.\n May emit a {RoleRevoked} event."
                  },
                  "functionSelector": "d547741f",
                  "id": 211,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "arguments": [
                        {
                          "arguments": [
                            {
                              "id": 201,
                              "name": "role",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 195,
                              "src": "5798:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 200,
                            "name": "getRoleAdmin",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 173,
                            "src": "5785:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bytes32_$",
                              "typeString": "function (bytes32) view returns (bytes32)"
                            }
                          },
                          "id": 202,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5785:18:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "id": 203,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 199,
                        "name": "onlyRole",
                        "nameLocations": [
                          "5776:8:0"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 59,
                        "src": "5776:8:0"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "5776:28:0"
                    }
                  ],
                  "name": "revokeRole",
                  "nameLocation": "5719:10:0",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 198,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 195,
                        "mutability": "mutable",
                        "name": "role",
                        "nameLocation": "5738:4:0",
                        "nodeType": "VariableDeclaration",
                        "scope": 211,
                        "src": "5730:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 194,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "5730:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 197,
                        "mutability": "mutable",
                        "name": "account",
                        "nameLocation": "5752:7:0",
                        "nodeType": "VariableDeclaration",
                        "scope": 211,
                        "src": "5744:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 196,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5744:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5729:31:0"
                  },
                  "returnParameters": {
                    "id": 204,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "5805:0:0"
                  },
                  "scope": 364,
                  "src": "5710:138:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    2573
                  ],
                  "body": {
                    "id": 233,
                    "nodeType": "Block",
                    "src": "6475:166:0",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 222,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 219,
                            "name": "callerConfirmation",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 216,
                            "src": "6489:18:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 220,
                              "name": "_msgSender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2273,
                              "src": "6511:10:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                "typeString": "function () view returns (address)"
                              }
                            },
                            "id": 221,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6511:12:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "6489:34:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 227,
                        "nodeType": "IfStatement",
                        "src": "6485:102:0",
                        "trueBody": {
                          "id": 226,
                          "nodeType": "Block",
                          "src": "6525:62:0",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 223,
                                  "name": "AccessControlBadConfirmation",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2504,
                                  "src": "6546:28:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                                    "typeString": "function () pure returns (error)"
                                  }
                                },
                                "id": 224,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "6546:30:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 225,
                              "nodeType": "RevertStatement",
                              "src": "6539:37:0"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 229,
                              "name": "role",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 214,
                              "src": "6609:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "id": 230,
                              "name": "callerConfirmation",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 216,
                              "src": "6615:18:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 228,
                            "name": "_revokeRole",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 363,
                            "src": "6597:11:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$_t_bool_$",
                              "typeString": "function (bytes32,address) returns (bool)"
                            }
                          },
                          "id": 231,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6597:37:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 232,
                        "nodeType": "ExpressionStatement",
                        "src": "6597:37:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 212,
                    "nodeType": "StructuredDocumentation",
                    "src": "5854:537:0",
                    "text": " @dev Revokes `role` from the calling account.\n Roles are often managed via {grantRole} and {revokeRole}: this function's\n purpose is to provide a mechanism for accounts to lose their privileges\n if they are compromised (such as when a trusted device is misplaced).\n If the calling account had been revoked `role`, emits a {RoleRevoked}\n event.\n Requirements:\n - the caller must be `callerConfirmation`.\n May emit a {RoleRevoked} event."
                  },
                  "functionSelector": "36568abe",
                  "id": 234,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "renounceRole",
                  "nameLocation": "6405:12:0",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 217,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 214,
                        "mutability": "mutable",
                        "name": "role",
                        "nameLocation": "6426:4:0",
                        "nodeType": "VariableDeclaration",
                        "scope": 234,
                        "src": "6418:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 213,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "6418:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 216,
                        "mutability": "mutable",
                        "name": "callerConfirmation",
                        "nameLocation": "6440:18:0",
                        "nodeType": "VariableDeclaration",
                        "scope": 234,
                        "src": "6432:26:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 215,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "6432:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6417:42:0"
                  },
                  "returnParameters": {
                    "id": 218,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "6475:0:0"
                  },
                  "scope": 364,
                  "src": "6396:245:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 269,
                    "nodeType": "Block",
                    "src": "6839:245:0",
                    "statements": [
                      {
                        "assignments": [
                          244
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 244,
                            "mutability": "mutable",
                            "name": "$",
                            "nameLocation": "6878:1:0",
                            "nodeType": "VariableDeclaration",
                            "scope": 269,
                            "src": "6849:30:0",
                            "stateVariable": false,
                            "storageLocation": "storage",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_AccessControlStorage_$37_storage_ptr",
                              "typeString": "struct AccessControlUpgradeable.AccessControlStorage"
                            },
                            "typeName": {
                              "id": 243,
                              "nodeType": "UserDefinedTypeName",
                              "pathNode": {
                                "id": 242,
                                "name": "AccessControlStorage",
                                "nameLocations": [
                                  "6849:20:0"
                                ],
                                "nodeType": "IdentifierPath",
                                "referencedDeclaration": 37,
                                "src": "6849:20:0"
                              },
                              "referencedDeclaration": 37,
                              "src": "6849:20:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_AccessControlStorage_$37_storage_ptr",
                                "typeString": "struct AccessControlUpgradeable.AccessControlStorage"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 247,
                        "initialValue": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 245,
                            "name": "_getAccessControlStorage",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 48,
                            "src": "6882:24:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_AccessControlStorage_$37_storage_ptr_$",
                              "typeString": "function () pure returns (struct AccessControlUpgradeable.AccessControlStorage storage pointer)"
                            }
                          },
                          "id": 246,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6882:26:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_AccessControlStorage_$37_storage_ptr",
                            "typeString": "struct AccessControlUpgradeable.AccessControlStorage storage pointer"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "6849:59:0"
                      },
                      {
                        "assignments": [
                          249
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 249,
                            "mutability": "mutable",
                            "name": "previousAdminRole",
                            "nameLocation": "6926:17:0",
                            "nodeType": "VariableDeclaration",
                            "scope": 269,
                            "src": "6918:25:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            "typeName": {
                              "id": 248,
                              "name": "bytes32",
                              "nodeType": "ElementaryTypeName",
                              "src": "6918:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 253,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 251,
                              "name": "role",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 237,
                              "src": "6959:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 250,
                            "name": "getRoleAdmin",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 173,
                            "src": "6946:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bytes32_$",
                              "typeString": "function (bytes32) view returns (bytes32)"
                            }
                          },
                          "id": 252,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6946:18:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "6918:46:0"
                      },
                      {
                        "expression": {
                          "id": 261,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "baseExpression": {
                                "expression": {
                                  "id": 254,
                                  "name": "$",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 244,
                                  "src": "6974:1:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_AccessControlStorage_$37_storage_ptr",
                                    "typeString": "struct AccessControlUpgradeable.AccessControlStorage storage pointer"
                                  }
                                },
                                "id": 257,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "6976:6:0",
                                "memberName": "_roles",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 36,
                                "src": "6974:8:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_RoleData_$27_storage_$",
                                  "typeString": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData storage ref)"
                                }
                              },
                              "id": 258,
                              "indexExpression": {
                                "id": 256,
                                "name": "role",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 237,
                                "src": "6983:4:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "6974:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_RoleData_$27_storage",
                                "typeString": "struct AccessControlUpgradeable.RoleData storage ref"
                              }
                            },
                            "id": 259,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberLocation": "6989:9:0",
                            "memberName": "adminRole",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 26,
                            "src": "6974:24:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 260,
                            "name": "adminRole",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 239,
                            "src": "7001:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "6974:36:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 262,
                        "nodeType": "ExpressionStatement",
                        "src": "6974:36:0"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 264,
                              "name": "role",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 237,
                              "src": "7042:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "id": 265,
                              "name": "previousAdminRole",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 249,
                              "src": "7048:17:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "id": 266,
                              "name": "adminRole",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 239,
                              "src": "7067:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 263,
                            "name": "RoleAdminChanged",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2513,
                            "src": "7025:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_bytes32_$_t_bytes32_$returns$__$",
                              "typeString": "function (bytes32,bytes32,bytes32)"
                            }
                          },
                          "id": 267,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7025:52:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 268,
                        "nodeType": "EmitStatement",
                        "src": "7020:57:0"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 235,
                    "nodeType": "StructuredDocumentation",
                    "src": "6647:114:0",
                    "text": " @dev Sets `adminRole` as ``role``'s admin role.\n Emits a {RoleAdminChanged} event."
                  },
                  "id": 270,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_setRoleAdmin",
                  "nameLocation": "6775:13:0",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 240,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 237,
                        "mutability": "mutable",
                        "name": "role",
                        "nameLocation": "6797:4:0",
                        "nodeType": "VariableDeclaration",
                        "scope": 270,
                        "src": "6789:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 236,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "6789:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 239,
                        "mutability": "mutable",
                        "name": "adminRole",
                        "nameLocation": "6811:9:0",
                        "nodeType": "VariableDeclaration",
                        "scope": 270,
                        "src": "6803:17:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 238,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "6803:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6788:33:0"
                  },
                  "returnParameters": {
                    "id": 241,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "6839:0:0"
                  },
                  "scope": 364,
                  "src": "6766:318:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 316,
                    "nodeType": "Block",
                    "src": "7401:304:0",
                    "statements": [
                      {
                        "assignments": [
                          282
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 282,
                            "mutability": "mutable",
                            "name": "$",
                            "nameLocation": "7440:1:0",
                            "nodeType": "VariableDeclaration",
                            "scope": 316,
                            "src": "7411:30:0",
                            "stateVariable": false,
                            "storageLocation": "storage",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_AccessControlStorage_$37_storage_ptr",
                              "typeString": "struct AccessControlUpgradeable.AccessControlStorage"
                            },
                            "typeName": {
                              "id": 281,
                              "nodeType": "UserDefinedTypeName",
                              "pathNode": {
                                "id": 280,
                                "name": "AccessControlStorage",
                                "nameLocations": [
                                  "7411:20:0"
                                ],
                                "nodeType": "IdentifierPath",
                                "referencedDeclaration": 37,
                                "src": "7411:20:0"
                              },
                              "referencedDeclaration": 37,
                              "src": "7411:20:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_AccessControlStorage_$37_storage_ptr",
                                "typeString": "struct AccessControlUpgradeable.AccessControlStorage"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 285,
                        "initialValue": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 283,
                            "name": "_getAccessControlStorage",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 48,
                            "src": "7444:24:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_AccessControlStorage_$37_storage_ptr_$",
                              "typeString": "function () pure returns (struct AccessControlUpgradeable.AccessControlStorage storage pointer)"
                            }
                          },
                          "id": 284,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7444:26:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_AccessControlStorage_$37_storage_ptr",
                            "typeString": "struct AccessControlUpgradeable.AccessControlStorage storage pointer"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "7411:59:0"
                      },
                      {
                        "condition": {
                          "id": 290,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "7484:23:0",
                          "subExpression": {
                            "arguments": [
                              {
                                "id": 287,
                                "name": "role",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 273,
                                "src": "7493:4:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              {
                                "id": 288,
                                "name": "account",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 275,
                                "src": "7499:7:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 286,
                              "name": "hasRole",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 118,
                              "src": "7485:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$",
                                "typeString": "function (bytes32,address) view returns (bool)"
                              }
                            },
                            "id": 289,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7485:22:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 314,
                          "nodeType": "Block",
                          "src": "7662:37:0",
                          "statements": [
                            {
                              "expression": {
                                "hexValue": "66616c7365",
                                "id": 312,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "7683:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "false"
                              },
                              "functionReturnParameters": 279,
                              "id": 313,
                              "nodeType": "Return",
                              "src": "7676:12:0"
                            }
                          ]
                        },
                        "id": 315,
                        "nodeType": "IfStatement",
                        "src": "7480:219:0",
                        "trueBody": {
                          "id": 311,
                          "nodeType": "Block",
                          "src": "7509:147:0",
                          "statements": [
                            {
                              "expression": {
                                "id": 300,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "baseExpression": {
                                    "expression": {
                                      "baseExpression": {
                                        "expression": {
                                          "id": 291,
                                          "name": "$",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 282,
                                          "src": "7523:1:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_AccessControlStorage_$37_storage_ptr",
                                            "typeString": "struct AccessControlUpgradeable.AccessControlStorage storage pointer"
                                          }
                                        },
                                        "id": 294,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberLocation": "7525:6:0",
                                        "memberName": "_roles",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 36,
                                        "src": "7523:8:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_RoleData_$27_storage_$",
                                          "typeString": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData storage ref)"
                                        }
                                      },
                                      "id": 295,
                                      "indexExpression": {
                                        "id": 293,
                                        "name": "role",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 273,
                                        "src": "7532:4:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "7523:14:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_RoleData_$27_storage",
                                        "typeString": "struct AccessControlUpgradeable.RoleData storage ref"
                                      }
                                    },
                                    "id": 296,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "7538:7:0",
                                    "memberName": "hasRole",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 24,
                                    "src": "7523:22:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                      "typeString": "mapping(address => bool)"
                                    }
                                  },
                                  "id": 298,
                                  "indexExpression": {
                                    "id": 297,
                                    "name": "account",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 275,
                                    "src": "7546:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "7523:31:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "hexValue": "74727565",
                                  "id": 299,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "bool",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "7557:4:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "value": "true"
                                },
                                "src": "7523:38:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 301,
                              "nodeType": "ExpressionStatement",
                              "src": "7523:38:0"
                            },
                            {
                              "eventCall": {
                                "arguments": [
                                  {
                                    "id": 303,
                                    "name": "role",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 273,
                                    "src": "7592:4:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  {
                                    "id": 304,
                                    "name": "account",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 275,
                                    "src": "7598:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "arguments": [],
                                    "expression": {
                                      "argumentTypes": [],
                                      "id": 305,
                                      "name": "_msgSender",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2273,
                                      "src": "7607:10:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                        "typeString": "function () view returns (address)"
                                      }
                                    },
                                    "id": 306,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "7607:12:0",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 302,
                                  "name": "RoleGranted",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2522,
                                  "src": "7580:11:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_address_$returns$__$",
                                    "typeString": "function (bytes32,address,address)"
                                  }
                                },
                                "id": 307,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7580:40:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 308,
                              "nodeType": "EmitStatement",
                              "src": "7575:45:0"
                            },
                            {
                              "expression": {
                                "hexValue": "74727565",
                                "id": 309,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "7641:4:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "true"
                              },
                              "functionReturnParameters": 279,
                              "id": 310,
                              "nodeType": "Return",
                              "src": "7634:11:0"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 271,
                    "nodeType": "StructuredDocumentation",
                    "src": "7090:223:0",
                    "text": " @dev Attempts to grant `role` to `account` and returns a boolean indicating if `role` was granted.\n Internal function without access restriction.\n May emit a {RoleGranted} event."
                  },
                  "id": 317,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_grantRole",
                  "nameLocation": "7327:10:0",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 276,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 273,
                        "mutability": "mutable",
                        "name": "role",
                        "nameLocation": "7346:4:0",
                        "nodeType": "VariableDeclaration",
                        "scope": 317,
                        "src": "7338:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 272,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "7338:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 275,
                        "mutability": "mutable",
                        "name": "account",
                        "nameLocation": "7360:7:0",
                        "nodeType": "VariableDeclaration",
                        "scope": 317,
                        "src": "7352:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 274,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "7352:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7337:31:0"
                  },
                  "returnParameters": {
                    "id": 279,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 278,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 317,
                        "src": "7395:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 277,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "7395:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7394:6:0"
                  },
                  "scope": 364,
                  "src": "7318:387:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 362,
                    "nodeType": "Block",
                    "src": "8026:304:0",
                    "statements": [
                      {
                        "assignments": [
                          329
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 329,
                            "mutability": "mutable",
                            "name": "$",
                            "nameLocation": "8065:1:0",
                            "nodeType": "VariableDeclaration",
                            "scope": 362,
                            "src": "8036:30:0",
                            "stateVariable": false,
                            "storageLocation": "storage",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_AccessControlStorage_$37_storage_ptr",
                              "typeString": "struct AccessControlUpgradeable.AccessControlStorage"
                            },
                            "typeName": {
                              "id": 328,
                              "nodeType": "UserDefinedTypeName",
                              "pathNode": {
                                "id": 327,
                                "name": "AccessControlStorage",
                                "nameLocations": [
                                  "8036:20:0"
                                ],
                                "nodeType": "IdentifierPath",
                                "referencedDeclaration": 37,
                                "src": "8036:20:0"
                              },
                              "referencedDeclaration": 37,
                              "src": "8036:20:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_AccessControlStorage_$37_storage_ptr",
                                "typeString": "struct AccessControlUpgradeable.AccessControlStorage"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 332,
                        "initialValue": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 330,
                            "name": "_getAccessControlStorage",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 48,
                            "src": "8069:24:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_AccessControlStorage_$37_storage_ptr_$",
                              "typeString": "function () pure returns (struct AccessControlUpgradeable.AccessControlStorage storage pointer)"
                            }
                          },
                          "id": 331,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8069:26:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_AccessControlStorage_$37_storage_ptr",
                            "typeString": "struct AccessControlUpgradeable.AccessControlStorage storage pointer"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "8036:59:0"
                      },
                      {
                        "condition": {
                          "arguments": [
                            {
                              "id": 334,
                              "name": "role",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 320,
                              "src": "8117:4:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "id": 335,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 322,
                              "src": "8123:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 333,
                            "name": "hasRole",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 118,
                            "src": "8109:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$",
                              "typeString": "function (bytes32,address) view returns (bool)"
                            }
                          },
                          "id": 336,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8109:22:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 360,
                          "nodeType": "Block",
                          "src": "8287:37:0",
                          "statements": [
                            {
                              "expression": {
                                "hexValue": "66616c7365",
                                "id": 358,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "8308:5:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "false"
                              },
                              "functionReturnParameters": 326,
                              "id": 359,
                              "nodeType": "Return",
                              "src": "8301:12:0"
                            }
                          ]
                        },
                        "id": 361,
                        "nodeType": "IfStatement",
                        "src": "8105:219:0",
                        "trueBody": {
                          "id": 357,
                          "nodeType": "Block",
                          "src": "8133:148:0",
                          "statements": [
                            {
                              "expression": {
                                "id": 346,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "baseExpression": {
                                    "expression": {
                                      "baseExpression": {
                                        "expression": {
                                          "id": 337,
                                          "name": "$",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 329,
                                          "src": "8147:1:0",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_AccessControlStorage_$37_storage_ptr",
                                            "typeString": "struct AccessControlUpgradeable.AccessControlStorage storage pointer"
                                          }
                                        },
                                        "id": 340,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberLocation": "8149:6:0",
                                        "memberName": "_roles",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 36,
                                        "src": "8147:8:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_RoleData_$27_storage_$",
                                          "typeString": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData storage ref)"
                                        }
                                      },
                                      "id": 341,
                                      "indexExpression": {
                                        "id": 339,
                                        "name": "role",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 320,
                                        "src": "8156:4:0",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "8147:14:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_RoleData_$27_storage",
                                        "typeString": "struct AccessControlUpgradeable.RoleData storage ref"
                                      }
                                    },
                                    "id": 342,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "8162:7:0",
                                    "memberName": "hasRole",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 24,
                                    "src": "8147:22:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                      "typeString": "mapping(address => bool)"
                                    }
                                  },
                                  "id": 344,
                                  "indexExpression": {
                                    "id": 343,
                                    "name": "account",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 322,
                                    "src": "8170:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "8147:31:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "hexValue": "66616c7365",
                                  "id": 345,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "bool",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "8181:5:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "value": "false"
                                },
                                "src": "8147:39:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 347,
                              "nodeType": "ExpressionStatement",
                              "src": "8147:39:0"
                            },
                            {
                              "eventCall": {
                                "arguments": [
                                  {
                                    "id": 349,
                                    "name": "role",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 320,
                                    "src": "8217:4:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  {
                                    "id": 350,
                                    "name": "account",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 322,
                                    "src": "8223:7:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "arguments": [],
                                    "expression": {
                                      "argumentTypes": [],
                                      "id": 351,
                                      "name": "_msgSender",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2273,
                                      "src": "8232:10:0",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                        "typeString": "function () view returns (address)"
                                      }
                                    },
                                    "id": 352,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "8232:12:0",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 348,
                                  "name": "RoleRevoked",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2531,
                                  "src": "8205:11:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_address_$returns$__$",
                                    "typeString": "function (bytes32,address,address)"
                                  }
                                },
                                "id": 353,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "8205:40:0",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 354,
                              "nodeType": "EmitStatement",
                              "src": "8200:45:0"
                            },
                            {
                              "expression": {
                                "hexValue": "74727565",
                                "id": 355,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "8266:4:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "true"
                              },
                              "functionReturnParameters": 326,
                              "id": 356,
                              "nodeType": "Return",
                              "src": "8259:11:0"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 318,
                    "nodeType": "StructuredDocumentation",
                    "src": "7711:226:0",
                    "text": " @dev Attempts to revoke `role` from `account` and returns a boolean indicating if `role` was revoked.\n Internal function without access restriction.\n May emit a {RoleRevoked} event."
                  },
                  "id": 363,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_revokeRole",
                  "nameLocation": "7951:11:0",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 323,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 320,
                        "mutability": "mutable",
                        "name": "role",
                        "nameLocation": "7971:4:0",
                        "nodeType": "VariableDeclaration",
                        "scope": 363,
                        "src": "7963:12:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 319,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "7963:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 322,
                        "mutability": "mutable",
                        "name": "account",
                        "nameLocation": "7985:7:0",
                        "nodeType": "VariableDeclaration",
                        "scope": 363,
                        "src": "7977:15:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 321,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "7977:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7962:31:0"
                  },
                  "returnParameters": {
                    "id": 326,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 325,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 363,
                        "src": "8020:4:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 324,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "8020:4:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8019:6:0"
                  },
                  "scope": 364,
                  "src": "7942:388:0",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                }
              ],
              "scope": 365,
              "src": "2171:6161:0",
              "usedErrors": [
                576,
                579,
                2501,
                2504
              ],
              "usedEvents": [
                584,
                2513,
                2522,
                2531
              ]
            }
          ],
          "src": "108:8225:0"
        },
        "id": 0
      },
      "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol",
          "exportedSymbols": {
            "ContextUpgradeable": [
              2291
            ],
            "Initializable": [
              827
            ],
            "OwnableUpgradeable": [
              559
            ]
          },
          "id": 560,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 366,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".20"
              ],
              "nodeType": "PragmaDirective",
              "src": "102:24:1"
            },
            {
              "absolutePath": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol",
              "file": "../utils/ContextUpgradeable.sol",
              "id": 368,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 560,
              "sourceUnit": 2292,
              "src": "128:67:1",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 367,
                    "name": "ContextUpgradeable",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2291,
                    "src": "136:18:1",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol",
              "file": "../proxy/utils/Initializable.sol",
              "id": 370,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 560,
              "sourceUnit": 828,
              "src": "196:63:1",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 369,
                    "name": "Initializable",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 827,
                    "src": "204:13:1",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "abstract": true,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 372,
                    "name": "Initializable",
                    "nameLocations": [
                      "789:13:1"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 827,
                    "src": "789:13:1"
                  },
                  "id": 373,
                  "nodeType": "InheritanceSpecifier",
                  "src": "789:13:1"
                },
                {
                  "baseName": {
                    "id": 374,
                    "name": "ContextUpgradeable",
                    "nameLocations": [
                      "804:18:1"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 2291,
                    "src": "804:18:1"
                  },
                  "id": 375,
                  "nodeType": "InheritanceSpecifier",
                  "src": "804:18:1"
                }
              ],
              "canonicalName": "OwnableUpgradeable",
              "contractDependencies": [],
              "contractKind": "contract",
              "documentation": {
                "id": 371,
                "nodeType": "StructuredDocumentation",
                "src": "261:487:1",
                "text": " @dev Contract module which provides a basic access control mechanism, where\n there is an account (an owner) that can be granted exclusive access to\n specific functions.\n The initial owner is set to the address provided by the deployer. This can\n later be changed with {transferOwnership}.\n This module is used through inheritance. It will make available the modifier\n `onlyOwner`, which can be applied to your functions to restrict their use to\n the owner."
              },
              "fullyImplemented": true,
              "id": 559,
              "linearizedBaseContracts": [
                559,
                2291,
                827
              ],
              "name": "OwnableUpgradeable",
              "nameLocation": "767:18:1",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "canonicalName": "OwnableUpgradeable.OwnableStorage",
                  "documentation": {
                    "id": 376,
                    "nodeType": "StructuredDocumentation",
                    "src": "829:65:1",
                    "text": "@custom:storage-location erc7201:openzeppelin.storage.Ownable"
                  },
                  "id": 379,
                  "members": [
                    {
                      "constant": false,
                      "id": 378,
                      "mutability": "mutable",
                      "name": "_owner",
                      "nameLocation": "939:6:1",
                      "nodeType": "VariableDeclaration",
                      "scope": 379,
                      "src": "931:14:1",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 377,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "931:7:1",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "name": "OwnableStorage",
                  "nameLocation": "906:14:1",
                  "nodeType": "StructDefinition",
                  "scope": 559,
                  "src": "899:53:1",
                  "visibility": "public"
                },
                {
                  "constant": true,
                  "id": 382,
                  "mutability": "constant",
                  "name": "OwnableStorageLocation",
                  "nameLocation": "1094:22:1",
                  "nodeType": "VariableDeclaration",
                  "scope": 559,
                  "src": "1069:116:1",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 380,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1069:7:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": {
                    "hexValue": "307839303136643039643732643430666461653266643863656163366236323334633737303632313466643339633163643165363039613035323863313939333030",
                    "id": 381,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1119:66:1",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_65173360639460082030725920392146925864023520599682862633725751242436743107328_by_1",
                      "typeString": "int_const 6517...(69 digits omitted)...7328"
                    },
                    "value": "0x9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300"
                  },
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 389,
                    "nodeType": "Block",
                    "src": "1270:81:1",
                    "statements": [
                      {
                        "AST": {
                          "nativeSrc": "1289:56:1",
                          "nodeType": "YulBlock",
                          "src": "1289:56:1",
                          "statements": [
                            {
                              "nativeSrc": "1303:32:1",
                              "nodeType": "YulAssignment",
                              "src": "1303:32:1",
                              "value": {
                                "name": "OwnableStorageLocation",
                                "nativeSrc": "1313:22:1",
                                "nodeType": "YulIdentifier",
                                "src": "1313:22:1"
                              },
                              "variableNames": [
                                {
                                  "name": "$.slot",
                                  "nativeSrc": "1303:6:1",
                                  "nodeType": "YulIdentifier",
                                  "src": "1303:6:1"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "paris",
                        "externalReferences": [
                          {
                            "declaration": 386,
                            "isOffset": false,
                            "isSlot": true,
                            "src": "1303:6:1",
                            "suffix": "slot",
                            "valueSize": 1
                          },
                          {
                            "declaration": 382,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1313:22:1",
                            "valueSize": 1
                          }
                        ],
                        "id": 388,
                        "nodeType": "InlineAssembly",
                        "src": "1280:65:1"
                      }
                    ]
                  },
                  "id": 390,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_getOwnableStorage",
                  "nameLocation": "1201:18:1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 383,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1219:2:1"
                  },
                  "returnParameters": {
                    "id": 387,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 386,
                        "mutability": "mutable",
                        "name": "$",
                        "nameLocation": "1267:1:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 390,
                        "src": "1244:24:1",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_OwnableStorage_$379_storage_ptr",
                          "typeString": "struct OwnableUpgradeable.OwnableStorage"
                        },
                        "typeName": {
                          "id": 385,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 384,
                            "name": "OwnableStorage",
                            "nameLocations": [
                              "1244:14:1"
                            ],
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 379,
                            "src": "1244:14:1"
                          },
                          "referencedDeclaration": 379,
                          "src": "1244:14:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_OwnableStorage_$379_storage_ptr",
                            "typeString": "struct OwnableUpgradeable.OwnableStorage"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1243:26:1"
                  },
                  "scope": 559,
                  "src": "1192:159:1",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "private"
                },
                {
                  "documentation": {
                    "id": 391,
                    "nodeType": "StructuredDocumentation",
                    "src": "1357:85:1",
                    "text": " @dev The caller account is not authorized to perform an operation."
                  },
                  "errorSelector": "118cdaa7",
                  "id": 395,
                  "name": "OwnableUnauthorizedAccount",
                  "nameLocation": "1453:26:1",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 394,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 393,
                        "mutability": "mutable",
                        "name": "account",
                        "nameLocation": "1488:7:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 395,
                        "src": "1480:15:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 392,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1480:7:1",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1479:17:1"
                  },
                  "src": "1447:50:1"
                },
                {
                  "documentation": {
                    "id": 396,
                    "nodeType": "StructuredDocumentation",
                    "src": "1503:82:1",
                    "text": " @dev The owner is not a valid owner account. (eg. `address(0)`)"
                  },
                  "errorSelector": "1e4fbdf7",
                  "id": 400,
                  "name": "OwnableInvalidOwner",
                  "nameLocation": "1596:19:1",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 399,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 398,
                        "mutability": "mutable",
                        "name": "owner",
                        "nameLocation": "1624:5:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 400,
                        "src": "1616:13:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 397,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1616:7:1",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1615:15:1"
                  },
                  "src": "1590:41:1"
                },
                {
                  "anonymous": false,
                  "eventSelector": "8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0",
                  "id": 406,
                  "name": "OwnershipTransferred",
                  "nameLocation": "1643:20:1",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 405,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 402,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "previousOwner",
                        "nameLocation": "1680:13:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 406,
                        "src": "1664:29:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 401,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1664:7:1",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 404,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "newOwner",
                        "nameLocation": "1711:8:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 406,
                        "src": "1695:24:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 403,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1695:7:1",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1663:57:1"
                  },
                  "src": "1637:84:1"
                },
                {
                  "body": {
                    "id": 418,
                    "nodeType": "Block",
                    "src": "1919:55:1",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 415,
                              "name": "initialOwner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 409,
                              "src": "1954:12:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 414,
                            "name": "__Ownable_init_unchained",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 446,
                            "src": "1929:24:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address)"
                            }
                          },
                          "id": 416,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1929:38:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 417,
                        "nodeType": "ExpressionStatement",
                        "src": "1929:38:1"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 407,
                    "nodeType": "StructuredDocumentation",
                    "src": "1727:115:1",
                    "text": " @dev Initializes the contract setting the address provided by the deployer as the initial owner."
                  },
                  "id": 419,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 412,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 411,
                        "name": "onlyInitializing",
                        "nameLocations": [
                          "1902:16:1"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 722,
                        "src": "1902:16:1"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "1902:16:1"
                    }
                  ],
                  "name": "__Ownable_init",
                  "nameLocation": "1856:14:1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 410,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 409,
                        "mutability": "mutable",
                        "name": "initialOwner",
                        "nameLocation": "1879:12:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 419,
                        "src": "1871:20:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 408,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1871:7:1",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1870:22:1"
                  },
                  "returnParameters": {
                    "id": 413,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1919:0:1"
                  },
                  "scope": 559,
                  "src": "1847:127:1",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 445,
                    "nodeType": "Block",
                    "src": "2062:153:1",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 431,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 426,
                            "name": "initialOwner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 421,
                            "src": "2076:12:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 429,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2100:1:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 428,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "2092:7:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 427,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "2092:7:1",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 430,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2092:10:1",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "2076:26:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 440,
                        "nodeType": "IfStatement",
                        "src": "2072:95:1",
                        "trueBody": {
                          "id": 439,
                          "nodeType": "Block",
                          "src": "2104:63:1",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "hexValue": "30",
                                        "id": 435,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "2153:1:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        }
                                      ],
                                      "id": 434,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "2145:7:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_address_$",
                                        "typeString": "type(address)"
                                      },
                                      "typeName": {
                                        "id": 433,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2145:7:1",
                                        "typeDescriptions": {}
                                      }
                                    },
                                    "id": 436,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "2145:10:1",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 432,
                                  "name": "OwnableInvalidOwner",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 400,
                                  "src": "2125:19:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$",
                                    "typeString": "function (address) pure returns (error)"
                                  }
                                },
                                "id": 437,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2125:31:1",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 438,
                              "nodeType": "RevertStatement",
                              "src": "2118:38:1"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 442,
                              "name": "initialOwner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 421,
                              "src": "2195:12:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 441,
                            "name": "_transferOwnership",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 558,
                            "src": "2176:18:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address)"
                            }
                          },
                          "id": 443,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2176:32:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 444,
                        "nodeType": "ExpressionStatement",
                        "src": "2176:32:1"
                      }
                    ]
                  },
                  "id": 446,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 424,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 423,
                        "name": "onlyInitializing",
                        "nameLocations": [
                          "2045:16:1"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 722,
                        "src": "2045:16:1"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "2045:16:1"
                    }
                  ],
                  "name": "__Ownable_init_unchained",
                  "nameLocation": "1989:24:1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 422,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 421,
                        "mutability": "mutable",
                        "name": "initialOwner",
                        "nameLocation": "2022:12:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 446,
                        "src": "2014:20:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 420,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2014:7:1",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2013:22:1"
                  },
                  "returnParameters": {
                    "id": 425,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2062:0:1"
                  },
                  "scope": 559,
                  "src": "1980:235:1",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 453,
                    "nodeType": "Block",
                    "src": "2324:41:1",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 449,
                            "name": "_checkOwner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 487,
                            "src": "2334:11:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$__$",
                              "typeString": "function () view"
                            }
                          },
                          "id": 450,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2334:13:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 451,
                        "nodeType": "ExpressionStatement",
                        "src": "2334:13:1"
                      },
                      {
                        "id": 452,
                        "nodeType": "PlaceholderStatement",
                        "src": "2357:1:1"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 447,
                    "nodeType": "StructuredDocumentation",
                    "src": "2221:77:1",
                    "text": " @dev Throws if called by any account other than the owner."
                  },
                  "id": 454,
                  "name": "onlyOwner",
                  "nameLocation": "2312:9:1",
                  "nodeType": "ModifierDefinition",
                  "parameters": {
                    "id": 448,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2321:2:1"
                  },
                  "src": "2303:62:1",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 469,
                    "nodeType": "Block",
                    "src": "2496:89:1",
                    "statements": [
                      {
                        "assignments": [
                          462
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 462,
                            "mutability": "mutable",
                            "name": "$",
                            "nameLocation": "2529:1:1",
                            "nodeType": "VariableDeclaration",
                            "scope": 469,
                            "src": "2506:24:1",
                            "stateVariable": false,
                            "storageLocation": "storage",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_OwnableStorage_$379_storage_ptr",
                              "typeString": "struct OwnableUpgradeable.OwnableStorage"
                            },
                            "typeName": {
                              "id": 461,
                              "nodeType": "UserDefinedTypeName",
                              "pathNode": {
                                "id": 460,
                                "name": "OwnableStorage",
                                "nameLocations": [
                                  "2506:14:1"
                                ],
                                "nodeType": "IdentifierPath",
                                "referencedDeclaration": 379,
                                "src": "2506:14:1"
                              },
                              "referencedDeclaration": 379,
                              "src": "2506:14:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_OwnableStorage_$379_storage_ptr",
                                "typeString": "struct OwnableUpgradeable.OwnableStorage"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 465,
                        "initialValue": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 463,
                            "name": "_getOwnableStorage",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 390,
                            "src": "2533:18:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_OwnableStorage_$379_storage_ptr_$",
                              "typeString": "function () pure returns (struct OwnableUpgradeable.OwnableStorage storage pointer)"
                            }
                          },
                          "id": 464,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2533:20:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_OwnableStorage_$379_storage_ptr",
                            "typeString": "struct OwnableUpgradeable.OwnableStorage storage pointer"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2506:47:1"
                      },
                      {
                        "expression": {
                          "expression": {
                            "id": 466,
                            "name": "$",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 462,
                            "src": "2570:1:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_OwnableStorage_$379_storage_ptr",
                              "typeString": "struct OwnableUpgradeable.OwnableStorage storage pointer"
                            }
                          },
                          "id": 467,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "2572:6:1",
                          "memberName": "_owner",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 378,
                          "src": "2570:8:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "functionReturnParameters": 459,
                        "id": 468,
                        "nodeType": "Return",
                        "src": "2563:15:1"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 455,
                    "nodeType": "StructuredDocumentation",
                    "src": "2371:65:1",
                    "text": " @dev Returns the address of the current owner."
                  },
                  "functionSelector": "8da5cb5b",
                  "id": 470,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "owner",
                  "nameLocation": "2450:5:1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 456,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2455:2:1"
                  },
                  "returnParameters": {
                    "id": 459,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 458,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 470,
                        "src": "2487:7:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 457,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2487:7:1",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2486:9:1"
                  },
                  "scope": 559,
                  "src": "2441:144:1",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 486,
                    "nodeType": "Block",
                    "src": "2703:117:1",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 478,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 474,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 470,
                              "src": "2717:5:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                "typeString": "function () view returns (address)"
                              }
                            },
                            "id": 475,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2717:7:1",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 476,
                              "name": "_msgSender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2273,
                              "src": "2728:10:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                "typeString": "function () view returns (address)"
                              }
                            },
                            "id": 477,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2728:12:1",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "2717:23:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 485,
                        "nodeType": "IfStatement",
                        "src": "2713:101:1",
                        "trueBody": {
                          "id": 484,
                          "nodeType": "Block",
                          "src": "2742:72:1",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "arguments": [],
                                    "expression": {
                                      "argumentTypes": [],
                                      "id": 480,
                                      "name": "_msgSender",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2273,
                                      "src": "2790:10:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                        "typeString": "function () view returns (address)"
                                      }
                                    },
                                    "id": 481,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "2790:12:1",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 479,
                                  "name": "OwnableUnauthorizedAccount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 395,
                                  "src": "2763:26:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$",
                                    "typeString": "function (address) pure returns (error)"
                                  }
                                },
                                "id": 482,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2763:40:1",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 483,
                              "nodeType": "RevertStatement",
                              "src": "2756:47:1"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 471,
                    "nodeType": "StructuredDocumentation",
                    "src": "2591:62:1",
                    "text": " @dev Throws if the sender is not the owner."
                  },
                  "id": 487,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_checkOwner",
                  "nameLocation": "2667:11:1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 472,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2678:2:1"
                  },
                  "returnParameters": {
                    "id": 473,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2703:0:1"
                  },
                  "scope": 559,
                  "src": "2658:162:1",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 500,
                    "nodeType": "Block",
                    "src": "3209:47:1",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 496,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3246:1:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 495,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "3238:7:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 494,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "3238:7:1",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 497,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3238:10:1",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 493,
                            "name": "_transferOwnership",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 558,
                            "src": "3219:18:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address)"
                            }
                          },
                          "id": 498,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3219:30:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 499,
                        "nodeType": "ExpressionStatement",
                        "src": "3219:30:1"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 488,
                    "nodeType": "StructuredDocumentation",
                    "src": "2826:324:1",
                    "text": " @dev Leaves the contract without owner. It will not be possible to call\n `onlyOwner` functions. Can only be called by the current owner.\n NOTE: Renouncing ownership will leave the contract without an owner,\n thereby disabling any functionality that is only available to the owner."
                  },
                  "functionSelector": "715018a6",
                  "id": 501,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 491,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 490,
                        "name": "onlyOwner",
                        "nameLocations": [
                          "3199:9:1"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 454,
                        "src": "3199:9:1"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "3199:9:1"
                    }
                  ],
                  "name": "renounceOwnership",
                  "nameLocation": "3164:17:1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 489,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3181:2:1"
                  },
                  "returnParameters": {
                    "id": 492,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3209:0:1"
                  },
                  "scope": 559,
                  "src": "3155:101:1",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 528,
                    "nodeType": "Block",
                    "src": "3475:145:1",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 514,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 509,
                            "name": "newOwner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 504,
                            "src": "3489:8:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 512,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3509:1:1",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 511,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "3501:7:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 510,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "3501:7:1",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 513,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3501:10:1",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "3489:22:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 523,
                        "nodeType": "IfStatement",
                        "src": "3485:91:1",
                        "trueBody": {
                          "id": 522,
                          "nodeType": "Block",
                          "src": "3513:63:1",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "hexValue": "30",
                                        "id": 518,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "3562:1:1",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        }
                                      ],
                                      "id": 517,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "3554:7:1",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_address_$",
                                        "typeString": "type(address)"
                                      },
                                      "typeName": {
                                        "id": 516,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3554:7:1",
                                        "typeDescriptions": {}
                                      }
                                    },
                                    "id": 519,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "3554:10:1",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 515,
                                  "name": "OwnableInvalidOwner",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 400,
                                  "src": "3534:19:1",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$",
                                    "typeString": "function (address) pure returns (error)"
                                  }
                                },
                                "id": 520,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3534:31:1",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 521,
                              "nodeType": "RevertStatement",
                              "src": "3527:38:1"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 525,
                              "name": "newOwner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 504,
                              "src": "3604:8:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 524,
                            "name": "_transferOwnership",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 558,
                            "src": "3585:18:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address)"
                            }
                          },
                          "id": 526,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3585:28:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 527,
                        "nodeType": "ExpressionStatement",
                        "src": "3585:28:1"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 502,
                    "nodeType": "StructuredDocumentation",
                    "src": "3262:138:1",
                    "text": " @dev Transfers ownership of the contract to a new account (`newOwner`).\n Can only be called by the current owner."
                  },
                  "functionSelector": "f2fde38b",
                  "id": 529,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 507,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 506,
                        "name": "onlyOwner",
                        "nameLocations": [
                          "3465:9:1"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 454,
                        "src": "3465:9:1"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "3465:9:1"
                    }
                  ],
                  "name": "transferOwnership",
                  "nameLocation": "3414:17:1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 505,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 504,
                        "mutability": "mutable",
                        "name": "newOwner",
                        "nameLocation": "3440:8:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 529,
                        "src": "3432:16:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 503,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3432:7:1",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3431:18:1"
                  },
                  "returnParameters": {
                    "id": 508,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3475:0:1"
                  },
                  "scope": 559,
                  "src": "3405:215:1",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 557,
                    "nodeType": "Block",
                    "src": "3837:185:1",
                    "statements": [
                      {
                        "assignments": [
                          537
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 537,
                            "mutability": "mutable",
                            "name": "$",
                            "nameLocation": "3870:1:1",
                            "nodeType": "VariableDeclaration",
                            "scope": 557,
                            "src": "3847:24:1",
                            "stateVariable": false,
                            "storageLocation": "storage",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_OwnableStorage_$379_storage_ptr",
                              "typeString": "struct OwnableUpgradeable.OwnableStorage"
                            },
                            "typeName": {
                              "id": 536,
                              "nodeType": "UserDefinedTypeName",
                              "pathNode": {
                                "id": 535,
                                "name": "OwnableStorage",
                                "nameLocations": [
                                  "3847:14:1"
                                ],
                                "nodeType": "IdentifierPath",
                                "referencedDeclaration": 379,
                                "src": "3847:14:1"
                              },
                              "referencedDeclaration": 379,
                              "src": "3847:14:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_OwnableStorage_$379_storage_ptr",
                                "typeString": "struct OwnableUpgradeable.OwnableStorage"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 540,
                        "initialValue": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 538,
                            "name": "_getOwnableStorage",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 390,
                            "src": "3874:18:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_OwnableStorage_$379_storage_ptr_$",
                              "typeString": "function () pure returns (struct OwnableUpgradeable.OwnableStorage storage pointer)"
                            }
                          },
                          "id": 539,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3874:20:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_OwnableStorage_$379_storage_ptr",
                            "typeString": "struct OwnableUpgradeable.OwnableStorage storage pointer"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3847:47:1"
                      },
                      {
                        "assignments": [
                          542
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 542,
                            "mutability": "mutable",
                            "name": "oldOwner",
                            "nameLocation": "3912:8:1",
                            "nodeType": "VariableDeclaration",
                            "scope": 557,
                            "src": "3904:16:1",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 541,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "3904:7:1",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 545,
                        "initialValue": {
                          "expression": {
                            "id": 543,
                            "name": "$",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 537,
                            "src": "3923:1:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_OwnableStorage_$379_storage_ptr",
                              "typeString": "struct OwnableUpgradeable.OwnableStorage storage pointer"
                            }
                          },
                          "id": 544,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "3925:6:1",
                          "memberName": "_owner",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 378,
                          "src": "3923:8:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3904:27:1"
                      },
                      {
                        "expression": {
                          "id": 550,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 546,
                              "name": "$",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 537,
                              "src": "3941:1:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_OwnableStorage_$379_storage_ptr",
                                "typeString": "struct OwnableUpgradeable.OwnableStorage storage pointer"
                              }
                            },
                            "id": 548,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberLocation": "3943:6:1",
                            "memberName": "_owner",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 378,
                            "src": "3941:8:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 549,
                            "name": "newOwner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 532,
                            "src": "3952:8:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "3941:19:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 551,
                        "nodeType": "ExpressionStatement",
                        "src": "3941:19:1"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 553,
                              "name": "oldOwner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 542,
                              "src": "3996:8:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 554,
                              "name": "newOwner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 532,
                              "src": "4006:8:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 552,
                            "name": "OwnershipTransferred",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 406,
                            "src": "3975:20:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                              "typeString": "function (address,address)"
                            }
                          },
                          "id": 555,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3975:40:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 556,
                        "nodeType": "EmitStatement",
                        "src": "3970:45:1"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 530,
                    "nodeType": "StructuredDocumentation",
                    "src": "3626:143:1",
                    "text": " @dev Transfers ownership of the contract to a new account (`newOwner`).\n Internal function without access restriction."
                  },
                  "id": 558,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_transferOwnership",
                  "nameLocation": "3783:18:1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 533,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 532,
                        "mutability": "mutable",
                        "name": "newOwner",
                        "nameLocation": "3810:8:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 558,
                        "src": "3802:16:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 531,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3802:7:1",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3801:18:1"
                  },
                  "returnParameters": {
                    "id": 534,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3837:0:1"
                  },
                  "scope": 559,
                  "src": "3774:248:1",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                }
              ],
              "scope": 560,
              "src": "749:3275:1",
              "usedErrors": [
                395,
                400,
                576,
                579
              ],
              "usedEvents": [
                406,
                584
              ]
            }
          ],
          "src": "102:3923:1"
        },
        "id": 1
      },
      "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol",
          "exportedSymbols": {
            "Initializable": [
              827
            ]
          },
          "id": 828,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 561,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".20"
              ],
              "nodeType": "PragmaDirective",
              "src": "113:24:2"
            },
            {
              "abstract": true,
              "baseContracts": [],
              "canonicalName": "Initializable",
              "contractDependencies": [],
              "contractKind": "contract",
              "documentation": {
                "id": 562,
                "nodeType": "StructuredDocumentation",
                "src": "139:2209:2",
                "text": " @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\n external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\n reused. This mechanism prevents re-execution of each \"step\" but allows the creation of new initialization steps in\n case an upgrade adds a module that needs to be initialized.\n For example:\n [.hljs-theme-light.nopadding]\n ```solidity\n contract MyToken is ERC20Upgradeable {\n     function initialize() initializer public {\n         __ERC20_init(\"MyToken\", \"MTK\");\n     }\n }\n contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\n     function initializeV2() reinitializer(2) public {\n         __ERC20Permit_init(\"MyToken\");\n     }\n }\n ```\n TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\n CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\n [CAUTION]\n ====\n Avoid leaving a contract uninitialized.\n An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\n contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\n the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\n [.hljs-theme-light.nopadding]\n ```\n /// @custom:oz-upgrades-unsafe-allow constructor\n constructor() {\n     _disableInitializers();\n }\n ```\n ===="
              },
              "fullyImplemented": true,
              "id": 827,
              "linearizedBaseContracts": [
                827
              ],
              "name": "Initializable",
              "nameLocation": "2367:13:2",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "canonicalName": "Initializable.InitializableStorage",
                  "documentation": {
                    "id": 563,
                    "nodeType": "StructuredDocumentation",
                    "src": "2387:293:2",
                    "text": " @dev Storage of the initializable contract.\n It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions\n when using with upgradeable contracts.\n @custom:storage-location erc7201:openzeppelin.storage.Initializable"
                  },
                  "id": 570,
                  "members": [
                    {
                      "constant": false,
                      "id": 566,
                      "mutability": "mutable",
                      "name": "_initialized",
                      "nameLocation": "2820:12:2",
                      "nodeType": "VariableDeclaration",
                      "scope": 570,
                      "src": "2813:19:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      },
                      "typeName": {
                        "id": 565,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "2813:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 569,
                      "mutability": "mutable",
                      "name": "_initializing",
                      "nameLocation": "2955:13:2",
                      "nodeType": "VariableDeclaration",
                      "scope": 570,
                      "src": "2950:18:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 568,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "2950:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "name": "InitializableStorage",
                  "nameLocation": "2692:20:2",
                  "nodeType": "StructDefinition",
                  "scope": 827,
                  "src": "2685:290:2",
                  "visibility": "public"
                },
                {
                  "constant": true,
                  "id": 573,
                  "mutability": "constant",
                  "name": "INITIALIZABLE_STORAGE",
                  "nameLocation": "3123:21:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 827,
                  "src": "3098:115:2",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 571,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3098:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": {
                    "hexValue": "307866306335376531363834306466303430663135303838646332663831666533393163333932336265633733653233613936363265666339633232396336613030",
                    "id": 572,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "3147:66:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_108904022758810753673719992590105913556127789646572562039383141376366747609600_by_1",
                      "typeString": "int_const 1089...(70 digits omitted)...9600"
                    },
                    "value": "0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00"
                  },
                  "visibility": "private"
                },
                {
                  "documentation": {
                    "id": 574,
                    "nodeType": "StructuredDocumentation",
                    "src": "3220:60:2",
                    "text": " @dev The contract is already initialized."
                  },
                  "errorSelector": "f92ee8a9",
                  "id": 576,
                  "name": "InvalidInitialization",
                  "nameLocation": "3291:21:2",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 575,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3312:2:2"
                  },
                  "src": "3285:30:2"
                },
                {
                  "documentation": {
                    "id": 577,
                    "nodeType": "StructuredDocumentation",
                    "src": "3321:57:2",
                    "text": " @dev The contract is not initializing."
                  },
                  "errorSelector": "d7e6bcf8",
                  "id": 579,
                  "name": "NotInitializing",
                  "nameLocation": "3389:15:2",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 578,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3404:2:2"
                  },
                  "src": "3383:24:2"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 580,
                    "nodeType": "StructuredDocumentation",
                    "src": "3413:90:2",
                    "text": " @dev Triggered when the contract has been initialized or reinitialized."
                  },
                  "eventSelector": "c7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2",
                  "id": 584,
                  "name": "Initialized",
                  "nameLocation": "3514:11:2",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 583,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 582,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "version",
                        "nameLocation": "3533:7:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 584,
                        "src": "3526:14:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        "typeName": {
                          "id": 581,
                          "name": "uint64",
                          "nodeType": "ElementaryTypeName",
                          "src": "3526:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3525:16:2"
                  },
                  "src": "3508:34:2"
                },
                {
                  "body": {
                    "id": 666,
                    "nodeType": "Block",
                    "src": "4092:1079:2",
                    "statements": [
                      {
                        "assignments": [
                          589
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 589,
                            "mutability": "mutable",
                            "name": "$",
                            "nameLocation": "4187:1:2",
                            "nodeType": "VariableDeclaration",
                            "scope": 666,
                            "src": "4158:30:2",
                            "stateVariable": false,
                            "storageLocation": "storage",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_InitializableStorage_$570_storage_ptr",
                              "typeString": "struct Initializable.InitializableStorage"
                            },
                            "typeName": {
                              "id": 588,
                              "nodeType": "UserDefinedTypeName",
                              "pathNode": {
                                "id": 587,
                                "name": "InitializableStorage",
                                "nameLocations": [
                                  "4158:20:2"
                                ],
                                "nodeType": "IdentifierPath",
                                "referencedDeclaration": 570,
                                "src": "4158:20:2"
                              },
                              "referencedDeclaration": 570,
                              "src": "4158:20:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_InitializableStorage_$570_storage_ptr",
                                "typeString": "struct Initializable.InitializableStorage"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 592,
                        "initialValue": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 590,
                            "name": "_getInitializableStorage",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 826,
                            "src": "4191:24:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_InitializableStorage_$570_storage_ptr_$",
                              "typeString": "function () pure returns (struct Initializable.InitializableStorage storage pointer)"
                            }
                          },
                          "id": 591,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4191:26:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_InitializableStorage_$570_storage_ptr",
                            "typeString": "struct Initializable.InitializableStorage storage pointer"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4158:59:2"
                      },
                      {
                        "assignments": [
                          594
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 594,
                            "mutability": "mutable",
                            "name": "isTopLevelCall",
                            "nameLocation": "4284:14:2",
                            "nodeType": "VariableDeclaration",
                            "scope": 666,
                            "src": "4279:19:2",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 593,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "4279:4:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 598,
                        "initialValue": {
                          "id": 597,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "4301:16:2",
                          "subExpression": {
                            "expression": {
                              "id": 595,
                              "name": "$",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 589,
                              "src": "4302:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_InitializableStorage_$570_storage_ptr",
                                "typeString": "struct Initializable.InitializableStorage storage pointer"
                              }
                            },
                            "id": 596,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "4304:13:2",
                            "memberName": "_initializing",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 569,
                            "src": "4302:15:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4279:38:2"
                      },
                      {
                        "assignments": [
                          600
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 600,
                            "mutability": "mutable",
                            "name": "initialized",
                            "nameLocation": "4334:11:2",
                            "nodeType": "VariableDeclaration",
                            "scope": 666,
                            "src": "4327:18:2",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            },
                            "typeName": {
                              "id": 599,
                              "name": "uint64",
                              "nodeType": "ElementaryTypeName",
                              "src": "4327:6:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 603,
                        "initialValue": {
                          "expression": {
                            "id": 601,
                            "name": "$",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 589,
                            "src": "4348:1:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_InitializableStorage_$570_storage_ptr",
                              "typeString": "struct Initializable.InitializableStorage storage pointer"
                            }
                          },
                          "id": 602,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "4350:12:2",
                          "memberName": "_initialized",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 566,
                          "src": "4348:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4327:35:2"
                      },
                      {
                        "assignments": [
                          605
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 605,
                            "mutability": "mutable",
                            "name": "initialSetup",
                            "nameLocation": "4709:12:2",
                            "nodeType": "VariableDeclaration",
                            "scope": 666,
                            "src": "4704:17:2",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 604,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "4704:4:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 611,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 610,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            },
                            "id": 608,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 606,
                              "name": "initialized",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 600,
                              "src": "4724:11:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "hexValue": "30",
                              "id": 607,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4739:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "src": "4724:16:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "id": 609,
                            "name": "isTopLevelCall",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 594,
                            "src": "4744:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "4724:34:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4704:54:2"
                      },
                      {
                        "assignments": [
                          613
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 613,
                            "mutability": "mutable",
                            "name": "construction",
                            "nameLocation": "4773:12:2",
                            "nodeType": "VariableDeclaration",
                            "scope": 666,
                            "src": "4768:17:2",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 612,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "4768:4:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 626,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 625,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            },
                            "id": 616,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 614,
                              "name": "initialized",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 600,
                              "src": "4788:11:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "hexValue": "31",
                              "id": 615,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4803:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "src": "4788:16:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 624,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "expression": {
                                "expression": {
                                  "arguments": [
                                    {
                                      "id": 619,
                                      "name": "this",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -28,
                                      "src": "4816:4:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_Initializable_$827",
                                        "typeString": "contract Initializable"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_contract$_Initializable_$827",
                                        "typeString": "contract Initializable"
                                      }
                                    ],
                                    "id": 618,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "4808:7:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": {
                                      "id": 617,
                                      "name": "address",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "4808:7:2",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 620,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "4808:13:2",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "id": 621,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "4822:4:2",
                                "memberName": "code",
                                "nodeType": "MemberAccess",
                                "src": "4808:18:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 622,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "4827:6:2",
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "src": "4808:25:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "hexValue": "30",
                              "id": 623,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4837:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "src": "4808:30:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "4788:50:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4768:70:2"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 631,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 628,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "!",
                            "prefix": true,
                            "src": "4853:13:2",
                            "subExpression": {
                              "id": 627,
                              "name": "initialSetup",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 605,
                              "src": "4854:12:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "id": 630,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "!",
                            "prefix": true,
                            "src": "4870:13:2",
                            "subExpression": {
                              "id": 629,
                              "name": "construction",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 613,
                              "src": "4871:12:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "4853:30:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 636,
                        "nodeType": "IfStatement",
                        "src": "4849:91:2",
                        "trueBody": {
                          "id": 635,
                          "nodeType": "Block",
                          "src": "4885:55:2",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 632,
                                  "name": "InvalidInitialization",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 576,
                                  "src": "4906:21:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                                    "typeString": "function () pure returns (error)"
                                  }
                                },
                                "id": 633,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4906:23:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 634,
                              "nodeType": "RevertStatement",
                              "src": "4899:30:2"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "id": 641,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 637,
                              "name": "$",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 589,
                              "src": "4949:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_InitializableStorage_$570_storage_ptr",
                                "typeString": "struct Initializable.InitializableStorage storage pointer"
                              }
                            },
                            "id": 639,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberLocation": "4951:12:2",
                            "memberName": "_initialized",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 566,
                            "src": "4949:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "31",
                            "id": 640,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4966:1:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "4949:18:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "id": 642,
                        "nodeType": "ExpressionStatement",
                        "src": "4949:18:2"
                      },
                      {
                        "condition": {
                          "id": 643,
                          "name": "isTopLevelCall",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 594,
                          "src": "4981:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 651,
                        "nodeType": "IfStatement",
                        "src": "4977:67:2",
                        "trueBody": {
                          "id": 650,
                          "nodeType": "Block",
                          "src": "4997:47:2",
                          "statements": [
                            {
                              "expression": {
                                "id": 648,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "expression": {
                                    "id": 644,
                                    "name": "$",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 589,
                                    "src": "5011:1:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_InitializableStorage_$570_storage_ptr",
                                      "typeString": "struct Initializable.InitializableStorage storage pointer"
                                    }
                                  },
                                  "id": 646,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "memberLocation": "5013:13:2",
                                  "memberName": "_initializing",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 569,
                                  "src": "5011:15:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "hexValue": "74727565",
                                  "id": 647,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "bool",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "5029:4:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "value": "true"
                                },
                                "src": "5011:22:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 649,
                              "nodeType": "ExpressionStatement",
                              "src": "5011:22:2"
                            }
                          ]
                        }
                      },
                      {
                        "id": 652,
                        "nodeType": "PlaceholderStatement",
                        "src": "5053:1:2"
                      },
                      {
                        "condition": {
                          "id": 653,
                          "name": "isTopLevelCall",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 594,
                          "src": "5068:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 665,
                        "nodeType": "IfStatement",
                        "src": "5064:101:2",
                        "trueBody": {
                          "id": 664,
                          "nodeType": "Block",
                          "src": "5084:81:2",
                          "statements": [
                            {
                              "expression": {
                                "id": 658,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "expression": {
                                    "id": 654,
                                    "name": "$",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 589,
                                    "src": "5098:1:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_InitializableStorage_$570_storage_ptr",
                                      "typeString": "struct Initializable.InitializableStorage storage pointer"
                                    }
                                  },
                                  "id": 656,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "memberLocation": "5100:13:2",
                                  "memberName": "_initializing",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 569,
                                  "src": "5098:15:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "hexValue": "66616c7365",
                                  "id": 657,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "bool",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "5116:5:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "value": "false"
                                },
                                "src": "5098:23:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 659,
                              "nodeType": "ExpressionStatement",
                              "src": "5098:23:2"
                            },
                            {
                              "eventCall": {
                                "arguments": [
                                  {
                                    "hexValue": "31",
                                    "id": 661,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "5152:1:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    }
                                  ],
                                  "id": 660,
                                  "name": "Initialized",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 584,
                                  "src": "5140:11:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_event_nonpayable$_t_uint64_$returns$__$",
                                    "typeString": "function (uint64)"
                                  }
                                },
                                "id": 662,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "5140:14:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 663,
                              "nodeType": "EmitStatement",
                              "src": "5135:19:2"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 585,
                    "nodeType": "StructuredDocumentation",
                    "src": "3548:516:2",
                    "text": " @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\n `onlyInitializing` functions can be used to initialize parent contracts.\n Similar to `reinitializer(1)`, except that in the context of a constructor an `initializer` may be invoked any\n number of times. This behavior in the constructor can be useful during testing and is not expected to be used in\n production.\n Emits an {Initialized} event."
                  },
                  "id": 667,
                  "name": "initializer",
                  "nameLocation": "4078:11:2",
                  "nodeType": "ModifierDefinition",
                  "parameters": {
                    "id": 586,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "4089:2:2"
                  },
                  "src": "4069:1102:2",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 713,
                    "nodeType": "Block",
                    "src": "6289:392:2",
                    "statements": [
                      {
                        "assignments": [
                          674
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 674,
                            "mutability": "mutable",
                            "name": "$",
                            "nameLocation": "6384:1:2",
                            "nodeType": "VariableDeclaration",
                            "scope": 713,
                            "src": "6355:30:2",
                            "stateVariable": false,
                            "storageLocation": "storage",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_InitializableStorage_$570_storage_ptr",
                              "typeString": "struct Initializable.InitializableStorage"
                            },
                            "typeName": {
                              "id": 673,
                              "nodeType": "UserDefinedTypeName",
                              "pathNode": {
                                "id": 672,
                                "name": "InitializableStorage",
                                "nameLocations": [
                                  "6355:20:2"
                                ],
                                "nodeType": "IdentifierPath",
                                "referencedDeclaration": 570,
                                "src": "6355:20:2"
                              },
                              "referencedDeclaration": 570,
                              "src": "6355:20:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_InitializableStorage_$570_storage_ptr",
                                "typeString": "struct Initializable.InitializableStorage"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 677,
                        "initialValue": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 675,
                            "name": "_getInitializableStorage",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 826,
                            "src": "6388:24:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_InitializableStorage_$570_storage_ptr_$",
                              "typeString": "function () pure returns (struct Initializable.InitializableStorage storage pointer)"
                            }
                          },
                          "id": 676,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6388:26:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_InitializableStorage_$570_storage_ptr",
                            "typeString": "struct Initializable.InitializableStorage storage pointer"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "6355:59:2"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 684,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 678,
                              "name": "$",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 674,
                              "src": "6429:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_InitializableStorage_$570_storage_ptr",
                                "typeString": "struct Initializable.InitializableStorage storage pointer"
                              }
                            },
                            "id": 679,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "6431:13:2",
                            "memberName": "_initializing",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 569,
                            "src": "6429:15:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "||",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            },
                            "id": 683,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "expression": {
                                "id": 680,
                                "name": "$",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 674,
                                "src": "6448:1:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_InitializableStorage_$570_storage_ptr",
                                  "typeString": "struct Initializable.InitializableStorage storage pointer"
                                }
                              },
                              "id": 681,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "6450:12:2",
                              "memberName": "_initialized",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 566,
                              "src": "6448:14:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">=",
                            "rightExpression": {
                              "id": 682,
                              "name": "version",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 670,
                              "src": "6466:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            },
                            "src": "6448:25:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "6429:44:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 689,
                        "nodeType": "IfStatement",
                        "src": "6425:105:2",
                        "trueBody": {
                          "id": 688,
                          "nodeType": "Block",
                          "src": "6475:55:2",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 685,
                                  "name": "InvalidInitialization",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 576,
                                  "src": "6496:21:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                                    "typeString": "function () pure returns (error)"
                                  }
                                },
                                "id": 686,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "6496:23:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 687,
                              "nodeType": "RevertStatement",
                              "src": "6489:30:2"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "id": 694,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 690,
                              "name": "$",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 674,
                              "src": "6539:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_InitializableStorage_$570_storage_ptr",
                                "typeString": "struct Initializable.InitializableStorage storage pointer"
                              }
                            },
                            "id": 692,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberLocation": "6541:12:2",
                            "memberName": "_initialized",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 566,
                            "src": "6539:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 693,
                            "name": "version",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 670,
                            "src": "6556:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "src": "6539:24:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "id": 695,
                        "nodeType": "ExpressionStatement",
                        "src": "6539:24:2"
                      },
                      {
                        "expression": {
                          "id": 700,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 696,
                              "name": "$",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 674,
                              "src": "6573:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_InitializableStorage_$570_storage_ptr",
                                "typeString": "struct Initializable.InitializableStorage storage pointer"
                              }
                            },
                            "id": 698,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberLocation": "6575:13:2",
                            "memberName": "_initializing",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 569,
                            "src": "6573:15:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "74727565",
                            "id": 699,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "6591:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "true"
                          },
                          "src": "6573:22:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 701,
                        "nodeType": "ExpressionStatement",
                        "src": "6573:22:2"
                      },
                      {
                        "id": 702,
                        "nodeType": "PlaceholderStatement",
                        "src": "6605:1:2"
                      },
                      {
                        "expression": {
                          "id": 707,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 703,
                              "name": "$",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 674,
                              "src": "6616:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_InitializableStorage_$570_storage_ptr",
                                "typeString": "struct Initializable.InitializableStorage storage pointer"
                              }
                            },
                            "id": 705,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberLocation": "6618:13:2",
                            "memberName": "_initializing",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 569,
                            "src": "6616:15:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "66616c7365",
                            "id": 706,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "6634:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "false"
                          },
                          "src": "6616:23:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 708,
                        "nodeType": "ExpressionStatement",
                        "src": "6616:23:2"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 710,
                              "name": "version",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 670,
                              "src": "6666:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            ],
                            "id": 709,
                            "name": "Initialized",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 584,
                            "src": "6654:11:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_uint64_$returns$__$",
                              "typeString": "function (uint64)"
                            }
                          },
                          "id": 711,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6654:20:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 712,
                        "nodeType": "EmitStatement",
                        "src": "6649:25:2"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 668,
                    "nodeType": "StructuredDocumentation",
                    "src": "5177:1068:2",
                    "text": " @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\n contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\n used to initialize parent contracts.\n A reinitializer may be used after the original initialization step. This is essential to configure modules that\n are added through upgrades and that require initialization.\n When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\n cannot be nested. If one is invoked in the context of another, execution will revert.\n Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\n a contract, executing them in the right order is up to the developer or operator.\n WARNING: Setting the version to 2**64 - 1 will prevent any future reinitialization.\n Emits an {Initialized} event."
                  },
                  "id": 714,
                  "name": "reinitializer",
                  "nameLocation": "6259:13:2",
                  "nodeType": "ModifierDefinition",
                  "parameters": {
                    "id": 671,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 670,
                        "mutability": "mutable",
                        "name": "version",
                        "nameLocation": "6280:7:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 714,
                        "src": "6273:14:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        "typeName": {
                          "id": 669,
                          "name": "uint64",
                          "nodeType": "ElementaryTypeName",
                          "src": "6273:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6272:16:2"
                  },
                  "src": "6250:431:2",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 721,
                    "nodeType": "Block",
                    "src": "6919:48:2",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 717,
                            "name": "_checkInitializing",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 735,
                            "src": "6929:18:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$__$",
                              "typeString": "function () view"
                            }
                          },
                          "id": 718,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6929:20:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 719,
                        "nodeType": "ExpressionStatement",
                        "src": "6929:20:2"
                      },
                      {
                        "id": 720,
                        "nodeType": "PlaceholderStatement",
                        "src": "6959:1:2"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 715,
                    "nodeType": "StructuredDocumentation",
                    "src": "6687:199:2",
                    "text": " @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\n {initializer} and {reinitializer} modifiers, directly or indirectly."
                  },
                  "id": 722,
                  "name": "onlyInitializing",
                  "nameLocation": "6900:16:2",
                  "nodeType": "ModifierDefinition",
                  "parameters": {
                    "id": 716,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "6916:2:2"
                  },
                  "src": "6891:76:2",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 734,
                    "nodeType": "Block",
                    "src": "7134:89:2",
                    "statements": [
                      {
                        "condition": {
                          "id": 728,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "7148:18:2",
                          "subExpression": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 726,
                              "name": "_isInitializing",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 803,
                              "src": "7149:15:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$",
                                "typeString": "function () view returns (bool)"
                              }
                            },
                            "id": 727,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7149:17:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 733,
                        "nodeType": "IfStatement",
                        "src": "7144:73:2",
                        "trueBody": {
                          "id": 732,
                          "nodeType": "Block",
                          "src": "7168:49:2",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 729,
                                  "name": "NotInitializing",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 579,
                                  "src": "7189:15:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                                    "typeString": "function () pure returns (error)"
                                  }
                                },
                                "id": 730,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7189:17:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 731,
                              "nodeType": "RevertStatement",
                              "src": "7182:24:2"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 723,
                    "nodeType": "StructuredDocumentation",
                    "src": "6973:104:2",
                    "text": " @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}."
                  },
                  "id": 735,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_checkInitializing",
                  "nameLocation": "7091:18:2",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 724,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "7109:2:2"
                  },
                  "returnParameters": {
                    "id": 725,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "7134:0:2"
                  },
                  "scope": 827,
                  "src": "7082:141:2",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 780,
                    "nodeType": "Block",
                    "src": "7758:373:2",
                    "statements": [
                      {
                        "assignments": [
                          741
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 741,
                            "mutability": "mutable",
                            "name": "$",
                            "nameLocation": "7853:1:2",
                            "nodeType": "VariableDeclaration",
                            "scope": 780,
                            "src": "7824:30:2",
                            "stateVariable": false,
                            "storageLocation": "storage",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_InitializableStorage_$570_storage_ptr",
                              "typeString": "struct Initializable.InitializableStorage"
                            },
                            "typeName": {
                              "id": 740,
                              "nodeType": "UserDefinedTypeName",
                              "pathNode": {
                                "id": 739,
                                "name": "InitializableStorage",
                                "nameLocations": [
                                  "7824:20:2"
                                ],
                                "nodeType": "IdentifierPath",
                                "referencedDeclaration": 570,
                                "src": "7824:20:2"
                              },
                              "referencedDeclaration": 570,
                              "src": "7824:20:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_InitializableStorage_$570_storage_ptr",
                                "typeString": "struct Initializable.InitializableStorage"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 744,
                        "initialValue": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 742,
                            "name": "_getInitializableStorage",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 826,
                            "src": "7857:24:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_InitializableStorage_$570_storage_ptr_$",
                              "typeString": "function () pure returns (struct Initializable.InitializableStorage storage pointer)"
                            }
                          },
                          "id": 743,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7857:26:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_InitializableStorage_$570_storage_ptr",
                            "typeString": "struct Initializable.InitializableStorage storage pointer"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "7824:59:2"
                      },
                      {
                        "condition": {
                          "expression": {
                            "id": 745,
                            "name": "$",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 741,
                            "src": "7898:1:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_InitializableStorage_$570_storage_ptr",
                              "typeString": "struct Initializable.InitializableStorage storage pointer"
                            }
                          },
                          "id": 746,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "7900:13:2",
                          "memberName": "_initializing",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 569,
                          "src": "7898:15:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 751,
                        "nodeType": "IfStatement",
                        "src": "7894:76:2",
                        "trueBody": {
                          "id": 750,
                          "nodeType": "Block",
                          "src": "7915:55:2",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 747,
                                  "name": "InvalidInitialization",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 576,
                                  "src": "7936:21:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                                    "typeString": "function () pure returns (error)"
                                  }
                                },
                                "id": 748,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7936:23:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 749,
                              "nodeType": "RevertStatement",
                              "src": "7929:30:2"
                            }
                          ]
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          },
                          "id": 759,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 752,
                              "name": "$",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 741,
                              "src": "7983:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_InitializableStorage_$570_storage_ptr",
                                "typeString": "struct Initializable.InitializableStorage storage pointer"
                              }
                            },
                            "id": 753,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "7985:12:2",
                            "memberName": "_initialized",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 566,
                            "src": "7983:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 756,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "8006:6:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint64_$",
                                    "typeString": "type(uint64)"
                                  },
                                  "typeName": {
                                    "id": 755,
                                    "name": "uint64",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "8006:6:2",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_uint64_$",
                                    "typeString": "type(uint64)"
                                  }
                                ],
                                "id": 754,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -27,
                                "src": "8001:4:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 757,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "8001:12:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_uint64",
                                "typeString": "type(uint64)"
                              }
                            },
                            "id": 758,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberLocation": "8014:3:2",
                            "memberName": "max",
                            "nodeType": "MemberAccess",
                            "src": "8001:16:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "src": "7983:34:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 779,
                        "nodeType": "IfStatement",
                        "src": "7979:146:2",
                        "trueBody": {
                          "id": 778,
                          "nodeType": "Block",
                          "src": "8019:106:2",
                          "statements": [
                            {
                              "expression": {
                                "id": 768,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "expression": {
                                    "id": 760,
                                    "name": "$",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 741,
                                    "src": "8033:1:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_InitializableStorage_$570_storage_ptr",
                                      "typeString": "struct Initializable.InitializableStorage storage pointer"
                                    }
                                  },
                                  "id": 762,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "memberLocation": "8035:12:2",
                                  "memberName": "_initialized",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 566,
                                  "src": "8033:14:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint64",
                                    "typeString": "uint64"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "expression": {
                                    "arguments": [
                                      {
                                        "id": 765,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "ElementaryTypeNameExpression",
                                        "src": "8055:6:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_uint64_$",
                                          "typeString": "type(uint64)"
                                        },
                                        "typeName": {
                                          "id": 764,
                                          "name": "uint64",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "8055:6:2",
                                          "typeDescriptions": {}
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_type$_t_uint64_$",
                                          "typeString": "type(uint64)"
                                        }
                                      ],
                                      "id": 763,
                                      "name": "type",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -27,
                                      "src": "8050:4:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                        "typeString": "function () pure"
                                      }
                                    },
                                    "id": 766,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "8050:12:2",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_meta_type_t_uint64",
                                      "typeString": "type(uint64)"
                                    }
                                  },
                                  "id": 767,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberLocation": "8063:3:2",
                                  "memberName": "max",
                                  "nodeType": "MemberAccess",
                                  "src": "8050:16:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint64",
                                    "typeString": "uint64"
                                  }
                                },
                                "src": "8033:33:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint64",
                                  "typeString": "uint64"
                                }
                              },
                              "id": 769,
                              "nodeType": "ExpressionStatement",
                              "src": "8033:33:2"
                            },
                            {
                              "eventCall": {
                                "arguments": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "id": 773,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "nodeType": "ElementaryTypeNameExpression",
                                          "src": "8102:6:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_uint64_$",
                                            "typeString": "type(uint64)"
                                          },
                                          "typeName": {
                                            "id": 772,
                                            "name": "uint64",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "8102:6:2",
                                            "typeDescriptions": {}
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_type$_t_uint64_$",
                                            "typeString": "type(uint64)"
                                          }
                                        ],
                                        "id": 771,
                                        "name": "type",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": -27,
                                        "src": "8097:4:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                          "typeString": "function () pure"
                                        }
                                      },
                                      "id": 774,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "nameLocations": [],
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "8097:12:2",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_meta_type_t_uint64",
                                        "typeString": "type(uint64)"
                                      }
                                    },
                                    "id": 775,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberLocation": "8110:3:2",
                                    "memberName": "max",
                                    "nodeType": "MemberAccess",
                                    "src": "8097:16:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint64",
                                      "typeString": "uint64"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint64",
                                      "typeString": "uint64"
                                    }
                                  ],
                                  "id": 770,
                                  "name": "Initialized",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 584,
                                  "src": "8085:11:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_event_nonpayable$_t_uint64_$returns$__$",
                                    "typeString": "function (uint64)"
                                  }
                                },
                                "id": 776,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "8085:29:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 777,
                              "nodeType": "EmitStatement",
                              "src": "8080:34:2"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 736,
                    "nodeType": "StructuredDocumentation",
                    "src": "7229:475:2",
                    "text": " @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\n Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\n to any version. It is recommended to use this to lock implementation contracts that are designed to be called\n through proxies.\n Emits an {Initialized} event the first time it is successfully executed."
                  },
                  "id": 781,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_disableInitializers",
                  "nameLocation": "7718:20:2",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 737,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "7738:2:2"
                  },
                  "returnParameters": {
                    "id": 738,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "7758:0:2"
                  },
                  "scope": 827,
                  "src": "7709:422:2",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 791,
                    "nodeType": "Block",
                    "src": "8306:63:2",
                    "statements": [
                      {
                        "expression": {
                          "expression": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 787,
                              "name": "_getInitializableStorage",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 826,
                              "src": "8323:24:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_InitializableStorage_$570_storage_ptr_$",
                                "typeString": "function () pure returns (struct Initializable.InitializableStorage storage pointer)"
                              }
                            },
                            "id": 788,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8323:26:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_InitializableStorage_$570_storage_ptr",
                              "typeString": "struct Initializable.InitializableStorage storage pointer"
                            }
                          },
                          "id": 789,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "8350:12:2",
                          "memberName": "_initialized",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 566,
                          "src": "8323:39:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "functionReturnParameters": 786,
                        "id": 790,
                        "nodeType": "Return",
                        "src": "8316:46:2"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 782,
                    "nodeType": "StructuredDocumentation",
                    "src": "8137:99:2",
                    "text": " @dev Returns the highest version that has been initialized. See {reinitializer}."
                  },
                  "id": 792,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_getInitializedVersion",
                  "nameLocation": "8250:22:2",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 783,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "8272:2:2"
                  },
                  "returnParameters": {
                    "id": 786,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 785,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 792,
                        "src": "8298:6:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        "typeName": {
                          "id": 784,
                          "name": "uint64",
                          "nodeType": "ElementaryTypeName",
                          "src": "8298:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8297:8:2"
                  },
                  "scope": 827,
                  "src": "8241:128:2",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 802,
                    "nodeType": "Block",
                    "src": "8541:64:2",
                    "statements": [
                      {
                        "expression": {
                          "expression": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 798,
                              "name": "_getInitializableStorage",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 826,
                              "src": "8558:24:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_InitializableStorage_$570_storage_ptr_$",
                                "typeString": "function () pure returns (struct Initializable.InitializableStorage storage pointer)"
                              }
                            },
                            "id": 799,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8558:26:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_InitializableStorage_$570_storage_ptr",
                              "typeString": "struct Initializable.InitializableStorage storage pointer"
                            }
                          },
                          "id": 800,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "8585:13:2",
                          "memberName": "_initializing",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 569,
                          "src": "8558:40:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 797,
                        "id": 801,
                        "nodeType": "Return",
                        "src": "8551:47:2"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 793,
                    "nodeType": "StructuredDocumentation",
                    "src": "8375:105:2",
                    "text": " @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}."
                  },
                  "id": 803,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_isInitializing",
                  "nameLocation": "8494:15:2",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 794,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "8509:2:2"
                  },
                  "returnParameters": {
                    "id": 797,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 796,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 803,
                        "src": "8535:4:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 795,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "8535:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8534:6:2"
                  },
                  "scope": 827,
                  "src": "8485:120:2",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 811,
                    "nodeType": "Block",
                    "src": "8896:45:2",
                    "statements": [
                      {
                        "expression": {
                          "id": 809,
                          "name": "INITIALIZABLE_STORAGE",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 573,
                          "src": "8913:21:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "functionReturnParameters": 808,
                        "id": 810,
                        "nodeType": "Return",
                        "src": "8906:28:2"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 804,
                    "nodeType": "StructuredDocumentation",
                    "src": "8611:203:2",
                    "text": " @dev Pointer to storage slot. Allows integrators to override it with a custom storage location.\n NOTE: Consider following the ERC-7201 formula to derive storage locations."
                  },
                  "id": 812,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_initializableStorageSlot",
                  "nameLocation": "8828:25:2",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 805,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "8853:2:2"
                  },
                  "returnParameters": {
                    "id": 808,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 807,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 812,
                        "src": "8887:7:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 806,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "8887:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8886:9:2"
                  },
                  "scope": 827,
                  "src": "8819:122:2",
                  "stateMutability": "pure",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 825,
                    "nodeType": "Block",
                    "src": "9161:115:2",
                    "statements": [
                      {
                        "assignments": [
                          820
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 820,
                            "mutability": "mutable",
                            "name": "slot",
                            "nameLocation": "9179:4:2",
                            "nodeType": "VariableDeclaration",
                            "scope": 825,
                            "src": "9171:12:2",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            "typeName": {
                              "id": 819,
                              "name": "bytes32",
                              "nodeType": "ElementaryTypeName",
                              "src": "9171:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 823,
                        "initialValue": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 821,
                            "name": "_initializableStorageSlot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 812,
                            "src": "9186:25:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$__$returns$_t_bytes32_$",
                              "typeString": "function () pure returns (bytes32)"
                            }
                          },
                          "id": 822,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9186:27:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "9171:42:2"
                      },
                      {
                        "AST": {
                          "nativeSrc": "9232:38:2",
                          "nodeType": "YulBlock",
                          "src": "9232:38:2",
                          "statements": [
                            {
                              "nativeSrc": "9246:14:2",
                              "nodeType": "YulAssignment",
                              "src": "9246:14:2",
                              "value": {
                                "name": "slot",
                                "nativeSrc": "9256:4:2",
                                "nodeType": "YulIdentifier",
                                "src": "9256:4:2"
                              },
                              "variableNames": [
                                {
                                  "name": "$.slot",
                                  "nativeSrc": "9246:6:2",
                                  "nodeType": "YulIdentifier",
                                  "src": "9246:6:2"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "paris",
                        "externalReferences": [
                          {
                            "declaration": 817,
                            "isOffset": false,
                            "isSlot": true,
                            "src": "9246:6:2",
                            "suffix": "slot",
                            "valueSize": 1
                          },
                          {
                            "declaration": 820,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "9256:4:2",
                            "valueSize": 1
                          }
                        ],
                        "id": 824,
                        "nodeType": "InlineAssembly",
                        "src": "9223:47:2"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 813,
                    "nodeType": "StructuredDocumentation",
                    "src": "8947:67:2",
                    "text": " @dev Returns a pointer to the storage namespace."
                  },
                  "id": 826,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_getInitializableStorage",
                  "nameLocation": "9080:24:2",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 814,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "9104:2:2"
                  },
                  "returnParameters": {
                    "id": 818,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 817,
                        "mutability": "mutable",
                        "name": "$",
                        "nameLocation": "9158:1:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 826,
                        "src": "9129:30:2",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_InitializableStorage_$570_storage_ptr",
                          "typeString": "struct Initializable.InitializableStorage"
                        },
                        "typeName": {
                          "id": 816,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 815,
                            "name": "InitializableStorage",
                            "nameLocations": [
                              "9129:20:2"
                            ],
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 570,
                            "src": "9129:20:2"
                          },
                          "referencedDeclaration": 570,
                          "src": "9129:20:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_InitializableStorage_$570_storage_ptr",
                            "typeString": "struct Initializable.InitializableStorage"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "9128:32:2"
                  },
                  "scope": 827,
                  "src": "9071:205:2",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "private"
                }
              ],
              "scope": 828,
              "src": "2349:6929:2",
              "usedErrors": [
                576,
                579
              ],
              "usedEvents": [
                584
              ]
            }
          ],
          "src": "113:9166:2"
        },
        "id": 2
      },
      "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol",
          "exportedSymbols": {
            "ERC1967Utils": [
              3036
            ],
            "IERC1822Proxiable": [
              2605
            ],
            "Initializable": [
              827
            ],
            "UUPSUpgradeable": [
              1009
            ]
          },
          "id": 1010,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 829,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".22"
              ],
              "nodeType": "PragmaDirective",
              "src": "115:24:3"
            },
            {
              "absolutePath": "@openzeppelin/contracts/interfaces/draft-IERC1822.sol",
              "file": "@openzeppelin/contracts/interfaces/draft-IERC1822.sol",
              "id": 831,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 1010,
              "sourceUnit": 2606,
              "src": "141:88:3",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 830,
                    "name": "IERC1822Proxiable",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2605,
                    "src": "149:17:3",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol",
              "file": "@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol",
              "id": 833,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 1010,
              "sourceUnit": 3037,
              "src": "230:84:3",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 832,
                    "name": "ERC1967Utils",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3036,
                    "src": "238:12:3",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol",
              "file": "./Initializable.sol",
              "id": 835,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 1010,
              "sourceUnit": 828,
              "src": "315:50:3",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 834,
                    "name": "Initializable",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 827,
                    "src": "323:13:3",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "abstract": true,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 837,
                    "name": "Initializable",
                    "nameLocations": [
                      "1023:13:3"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 827,
                    "src": "1023:13:3"
                  },
                  "id": 838,
                  "nodeType": "InheritanceSpecifier",
                  "src": "1023:13:3"
                },
                {
                  "baseName": {
                    "id": 839,
                    "name": "IERC1822Proxiable",
                    "nameLocations": [
                      "1038:17:3"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 2605,
                    "src": "1038:17:3"
                  },
                  "id": 840,
                  "nodeType": "InheritanceSpecifier",
                  "src": "1038:17:3"
                }
              ],
              "canonicalName": "UUPSUpgradeable",
              "contractDependencies": [],
              "contractKind": "contract",
              "documentation": {
                "id": 836,
                "nodeType": "StructuredDocumentation",
                "src": "367:618:3",
                "text": " @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\n {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\n A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\n reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\n `UUPSUpgradeable` with a custom implementation of upgrades.\n The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism."
              },
              "fullyImplemented": false,
              "id": 1009,
              "linearizedBaseContracts": [
                1009,
                2605,
                827
              ],
              "name": "UUPSUpgradeable",
              "nameLocation": "1004:15:3",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "constant": false,
                  "documentation": {
                    "id": 841,
                    "nodeType": "StructuredDocumentation",
                    "src": "1062:61:3",
                    "text": "@custom:oz-upgrades-unsafe-allow state-variable-immutable"
                  },
                  "id": 847,
                  "mutability": "immutable",
                  "name": "__self",
                  "nameLocation": "1154:6:3",
                  "nodeType": "VariableDeclaration",
                  "scope": 1009,
                  "src": "1128:48:3",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 842,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1128:7:3",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": {
                    "arguments": [
                      {
                        "id": 845,
                        "name": "this",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -28,
                        "src": "1171:4:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_UUPSUpgradeable_$1009",
                          "typeString": "contract UUPSUpgradeable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_UUPSUpgradeable_$1009",
                          "typeString": "contract UUPSUpgradeable"
                        }
                      ],
                      "id": 844,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "1163:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": {
                        "id": 843,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1163:7:3",
                        "typeDescriptions": {}
                      }
                    },
                    "id": 846,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1163:13:3",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "private"
                },
                {
                  "constant": true,
                  "documentation": {
                    "id": 848,
                    "nodeType": "StructuredDocumentation",
                    "src": "1183:631:3",
                    "text": " @dev The version of the upgrade interface of the contract. If this getter is missing, both `upgradeTo(address)`\n and `upgradeToAndCall(address,bytes)` are present, and `upgradeTo` must be used if no function should be called,\n while `upgradeToAndCall` will invoke the `receive` function if the second argument is the empty byte string.\n If the getter returns `\"5.0.0\"`, only `upgradeToAndCall(address,bytes)` is present, and the second argument must\n be the empty byte string if no function should be called, making it impossible to invoke the `receive` function\n during an upgrade."
                  },
                  "functionSelector": "ad3cb1cc",
                  "id": 851,
                  "mutability": "constant",
                  "name": "UPGRADE_INTERFACE_VERSION",
                  "nameLocation": "1842:25:3",
                  "nodeType": "VariableDeclaration",
                  "scope": 1009,
                  "src": "1819:58:3",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 849,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1819:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": {
                    "hexValue": "352e302e30",
                    "id": 850,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1870:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_2ade050ecfcf8ae20ae1d10a23573f9d7e0bad85e74a2cf8338a65401e64558c",
                      "typeString": "literal_string \"5.0.0\""
                    },
                    "value": "5.0.0"
                  },
                  "visibility": "public"
                },
                {
                  "documentation": {
                    "id": 852,
                    "nodeType": "StructuredDocumentation",
                    "src": "1884:65:3",
                    "text": " @dev The call is from an unauthorized context."
                  },
                  "errorSelector": "e07c8dba",
                  "id": 854,
                  "name": "UUPSUnauthorizedCallContext",
                  "nameLocation": "1960:27:3",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 853,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1987:2:3"
                  },
                  "src": "1954:36:3"
                },
                {
                  "documentation": {
                    "id": 855,
                    "nodeType": "StructuredDocumentation",
                    "src": "1996:68:3",
                    "text": " @dev The storage `slot` is unsupported as a UUID."
                  },
                  "errorSelector": "aa1d49a4",
                  "id": 859,
                  "name": "UUPSUnsupportedProxiableUUID",
                  "nameLocation": "2075:28:3",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 858,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 857,
                        "mutability": "mutable",
                        "name": "slot",
                        "nameLocation": "2112:4:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 859,
                        "src": "2104:12:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 856,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2104:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2103:14:3"
                  },
                  "src": "2069:49:3"
                },
                {
                  "body": {
                    "id": 866,
                    "nodeType": "Block",
                    "src": "2645:41:3",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 862,
                            "name": "_checkProxy",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 941,
                            "src": "2655:11:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$__$",
                              "typeString": "function () view"
                            }
                          },
                          "id": 863,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2655:13:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 864,
                        "nodeType": "ExpressionStatement",
                        "src": "2655:13:3"
                      },
                      {
                        "id": 865,
                        "nodeType": "PlaceholderStatement",
                        "src": "2678:1:3"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 860,
                    "nodeType": "StructuredDocumentation",
                    "src": "2124:495:3",
                    "text": " @dev Check that the execution is being performed through a delegatecall call and that the execution context is\n a proxy contract with an implementation (as defined in ERC-1967) pointing to self. This should only be the case\n for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\n function through ERC-1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\n fail."
                  },
                  "id": 867,
                  "name": "onlyProxy",
                  "nameLocation": "2633:9:3",
                  "nodeType": "ModifierDefinition",
                  "parameters": {
                    "id": 861,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2642:2:3"
                  },
                  "src": "2624:62:3",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 874,
                    "nodeType": "Block",
                    "src": "2916:48:3",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 870,
                            "name": "_checkNotDelegated",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 957,
                            "src": "2926:18:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$__$",
                              "typeString": "function () view"
                            }
                          },
                          "id": 871,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2926:20:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 872,
                        "nodeType": "ExpressionStatement",
                        "src": "2926:20:3"
                      },
                      {
                        "id": 873,
                        "nodeType": "PlaceholderStatement",
                        "src": "2956:1:3"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 868,
                    "nodeType": "StructuredDocumentation",
                    "src": "2692:195:3",
                    "text": " @dev Check that the execution is not being performed through a delegate call. This allows a function to be\n callable on the implementing contract but not through proxies."
                  },
                  "id": 875,
                  "name": "notDelegated",
                  "nameLocation": "2901:12:3",
                  "nodeType": "ModifierDefinition",
                  "parameters": {
                    "id": 869,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2913:2:3"
                  },
                  "src": "2892:72:3",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 880,
                    "nodeType": "Block",
                    "src": "3030:7:3",
                    "statements": []
                  },
                  "id": 881,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 878,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 877,
                        "name": "onlyInitializing",
                        "nameLocations": [
                          "3013:16:3"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 722,
                        "src": "3013:16:3"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "3013:16:3"
                    }
                  ],
                  "name": "__UUPSUpgradeable_init",
                  "nameLocation": "2979:22:3",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 876,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3001:2:3"
                  },
                  "returnParameters": {
                    "id": 879,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3030:0:3"
                  },
                  "scope": 1009,
                  "src": "2970:67:3",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 886,
                    "nodeType": "Block",
                    "src": "3113:7:3",
                    "statements": []
                  },
                  "id": 887,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 884,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 883,
                        "name": "onlyInitializing",
                        "nameLocations": [
                          "3096:16:3"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 722,
                        "src": "3096:16:3"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "3096:16:3"
                    }
                  ],
                  "name": "__UUPSUpgradeable_init_unchained",
                  "nameLocation": "3052:32:3",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 882,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3084:2:3"
                  },
                  "returnParameters": {
                    "id": 885,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3113:0:3"
                  },
                  "scope": 1009,
                  "src": "3043:77:3",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    2604
                  ],
                  "body": {
                    "id": 898,
                    "nodeType": "Block",
                    "src": "3786:56:3",
                    "statements": [
                      {
                        "expression": {
                          "expression": {
                            "id": 895,
                            "name": "ERC1967Utils",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3036,
                            "src": "3803:12:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_ERC1967Utils_$3036_$",
                              "typeString": "type(library ERC1967Utils)"
                            }
                          },
                          "id": 896,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberLocation": "3816:19:3",
                          "memberName": "IMPLEMENTATION_SLOT",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2757,
                          "src": "3803:32:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "functionReturnParameters": 894,
                        "id": 897,
                        "nodeType": "Return",
                        "src": "3796:39:3"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 888,
                    "nodeType": "StructuredDocumentation",
                    "src": "3125:578:3",
                    "text": " @dev Implementation of the ERC-1822 {proxiableUUID} function. This returns the storage slot used by the\n implementation. It is used to validate the implementation's compatibility when performing an upgrade.\n IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\n bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\n function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier."
                  },
                  "functionSelector": "52d1902d",
                  "id": 899,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 891,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 890,
                        "name": "notDelegated",
                        "nameLocations": [
                          "3755:12:3"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 875,
                        "src": "3755:12:3"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "3755:12:3"
                    }
                  ],
                  "name": "proxiableUUID",
                  "nameLocation": "3717:13:3",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 889,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3730:2:3"
                  },
                  "returnParameters": {
                    "id": 894,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 893,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 899,
                        "src": "3777:7:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 892,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "3777:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3776:9:3"
                  },
                  "scope": 1009,
                  "src": "3708:134:3",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 918,
                    "nodeType": "Block",
                    "src": "4266:109:3",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 910,
                              "name": "newImplementation",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 902,
                              "src": "4294:17:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 909,
                            "name": "_authorizeUpgrade",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 963,
                            "src": "4276:17:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address)"
                            }
                          },
                          "id": 911,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4276:36:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 912,
                        "nodeType": "ExpressionStatement",
                        "src": "4276:36:3"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 914,
                              "name": "newImplementation",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 902,
                              "src": "4344:17:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 915,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 904,
                              "src": "4363:4:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 913,
                            "name": "_upgradeToAndCallUUPS",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1008,
                            "src": "4322:21:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$__$",
                              "typeString": "function (address,bytes memory)"
                            }
                          },
                          "id": 916,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4322:46:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 917,
                        "nodeType": "ExpressionStatement",
                        "src": "4322:46:3"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 900,
                    "nodeType": "StructuredDocumentation",
                    "src": "3848:308:3",
                    "text": " @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\n encoded in `data`.\n Calls {_authorizeUpgrade}.\n Emits an {Upgraded} event.\n @custom:oz-upgrades-unsafe-allow-reachable delegatecall"
                  },
                  "functionSelector": "4f1ef286",
                  "id": 919,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 907,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 906,
                        "name": "onlyProxy",
                        "nameLocations": [
                          "4256:9:3"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 867,
                        "src": "4256:9:3"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "4256:9:3"
                    }
                  ],
                  "name": "upgradeToAndCall",
                  "nameLocation": "4170:16:3",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 905,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 902,
                        "mutability": "mutable",
                        "name": "newImplementation",
                        "nameLocation": "4195:17:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 919,
                        "src": "4187:25:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 901,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4187:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 904,
                        "mutability": "mutable",
                        "name": "data",
                        "nameLocation": "4227:4:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 919,
                        "src": "4214:17:3",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 903,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "4214:5:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4186:46:3"
                  },
                  "returnParameters": {
                    "id": 908,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "4266:0:3"
                  },
                  "scope": 1009,
                  "src": "4161:214:3",
                  "stateMutability": "payable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 940,
                    "nodeType": "Block",
                    "src": "4623:267:3",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 934,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "id": 928,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "arguments": [
                                {
                                  "id": 925,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "4658:4:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_UUPSUpgradeable_$1009",
                                    "typeString": "contract UUPSUpgradeable"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_UUPSUpgradeable_$1009",
                                    "typeString": "contract UUPSUpgradeable"
                                  }
                                ],
                                "id": 924,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "4650:7:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 923,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "4650:7:3",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 926,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4650:13:3",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "id": 927,
                              "name": "__self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 847,
                              "src": "4667:6:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "src": "4650:23:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "||",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "id": 933,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "id": 929,
                                  "name": "ERC1967Utils",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3036,
                                  "src": "4728:12:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_ERC1967Utils_$3036_$",
                                    "typeString": "type(library ERC1967Utils)"
                                  }
                                },
                                "id": 930,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "4741:17:3",
                                "memberName": "getImplementation",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 2788,
                                "src": "4728:30:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                  "typeString": "function () view returns (address)"
                                }
                              },
                              "id": 931,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4728:32:3",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "!=",
                            "rightExpression": {
                              "id": 932,
                              "name": "__self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 847,
                              "src": "4764:6:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "src": "4728:42:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "4650:120:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 939,
                        "nodeType": "IfStatement",
                        "src": "4633:251:3",
                        "trueBody": {
                          "id": 938,
                          "nodeType": "Block",
                          "src": "4823:61:3",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 935,
                                  "name": "UUPSUnauthorizedCallContext",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 854,
                                  "src": "4844:27:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                                    "typeString": "function () pure returns (error)"
                                  }
                                },
                                "id": 936,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4844:29:3",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 937,
                              "nodeType": "RevertStatement",
                              "src": "4837:36:3"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 920,
                    "nodeType": "StructuredDocumentation",
                    "src": "4381:192:3",
                    "text": " @dev Reverts if the execution is not performed via delegatecall or the execution\n context is not of a proxy with an ERC-1967 compliant implementation pointing to self."
                  },
                  "id": 941,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_checkProxy",
                  "nameLocation": "4587:11:3",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 921,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "4598:2:3"
                  },
                  "returnParameters": {
                    "id": 922,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "4623:0:3"
                  },
                  "scope": 1009,
                  "src": "4578:312:3",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 956,
                    "nodeType": "Block",
                    "src": "5059:161:3",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 950,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [
                              {
                                "id": 947,
                                "name": "this",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -28,
                                "src": "5081:4:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_UUPSUpgradeable_$1009",
                                  "typeString": "contract UUPSUpgradeable"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_UUPSUpgradeable_$1009",
                                  "typeString": "contract UUPSUpgradeable"
                                }
                              ],
                              "id": 946,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "5073:7:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 945,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "5073:7:3",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 948,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5073:13:3",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 949,
                            "name": "__self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 847,
                            "src": "5090:6:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "5073:23:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 955,
                        "nodeType": "IfStatement",
                        "src": "5069:145:3",
                        "trueBody": {
                          "id": 954,
                          "nodeType": "Block",
                          "src": "5098:116:3",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 951,
                                  "name": "UUPSUnauthorizedCallContext",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 854,
                                  "src": "5174:27:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                                    "typeString": "function () pure returns (error)"
                                  }
                                },
                                "id": 952,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "5174:29:3",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 953,
                              "nodeType": "RevertStatement",
                              "src": "5167:36:3"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 942,
                    "nodeType": "StructuredDocumentation",
                    "src": "4896:106:3",
                    "text": " @dev Reverts if the execution is performed via delegatecall.\n See {notDelegated}."
                  },
                  "id": 957,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_checkNotDelegated",
                  "nameLocation": "5016:18:3",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 943,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "5034:2:3"
                  },
                  "returnParameters": {
                    "id": 944,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "5059:0:3"
                  },
                  "scope": 1009,
                  "src": "5007:213:3",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "documentation": {
                    "id": 958,
                    "nodeType": "StructuredDocumentation",
                    "src": "5226:372:3",
                    "text": " @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\n {upgradeToAndCall}.\n Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\n ```solidity\n function _authorizeUpgrade(address) internal onlyOwner {}\n ```"
                  },
                  "id": 963,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_authorizeUpgrade",
                  "nameLocation": "5612:17:3",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 961,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 960,
                        "mutability": "mutable",
                        "name": "newImplementation",
                        "nameLocation": "5638:17:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 963,
                        "src": "5630:25:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 959,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5630:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5629:27:3"
                  },
                  "returnParameters": {
                    "id": 962,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "5673:0:3"
                  },
                  "scope": 1009,
                  "src": "5603:71:3",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1007,
                    "nodeType": "Block",
                    "src": "6117:453:3",
                    "statements": [
                      {
                        "clauses": [
                          {
                            "block": {
                              "id": 996,
                              "nodeType": "Block",
                              "src": "6207:212:3",
                              "statements": [
                                {
                                  "condition": {
                                    "commonType": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    },
                                    "id": 982,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 979,
                                      "name": "slot",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 977,
                                      "src": "6225:4:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "!=",
                                    "rightExpression": {
                                      "expression": {
                                        "id": 980,
                                        "name": "ERC1967Utils",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3036,
                                        "src": "6233:12:3",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_contract$_ERC1967Utils_$3036_$",
                                          "typeString": "type(library ERC1967Utils)"
                                        }
                                      },
                                      "id": 981,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "memberLocation": "6246:19:3",
                                      "memberName": "IMPLEMENTATION_SLOT",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 2757,
                                      "src": "6233:32:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    },
                                    "src": "6225:40:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "id": 988,
                                  "nodeType": "IfStatement",
                                  "src": "6221:120:3",
                                  "trueBody": {
                                    "id": 987,
                                    "nodeType": "Block",
                                    "src": "6267:74:3",
                                    "statements": [
                                      {
                                        "errorCall": {
                                          "arguments": [
                                            {
                                              "id": 984,
                                              "name": "slot",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 977,
                                              "src": "6321:4:3",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_bytes32",
                                                "typeString": "bytes32"
                                              }
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": [
                                              {
                                                "typeIdentifier": "t_bytes32",
                                                "typeString": "bytes32"
                                              }
                                            ],
                                            "id": 983,
                                            "name": "UUPSUnsupportedProxiableUUID",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 859,
                                            "src": "6292:28:3",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_function_error_pure$_t_bytes32_$returns$_t_error_$",
                                              "typeString": "function (bytes32) pure returns (error)"
                                            }
                                          },
                                          "id": 985,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "kind": "functionCall",
                                          "lValueRequested": false,
                                          "nameLocations": [],
                                          "names": [],
                                          "nodeType": "FunctionCall",
                                          "src": "6292:34:3",
                                          "tryCall": false,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_error",
                                            "typeString": "error"
                                          }
                                        },
                                        "id": 986,
                                        "nodeType": "RevertStatement",
                                        "src": "6285:41:3"
                                      }
                                    ]
                                  }
                                },
                                {
                                  "expression": {
                                    "arguments": [
                                      {
                                        "id": 992,
                                        "name": "newImplementation",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 966,
                                        "src": "6384:17:3",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      {
                                        "id": 993,
                                        "name": "data",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 968,
                                        "src": "6403:4:3",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      ],
                                      "expression": {
                                        "id": 989,
                                        "name": "ERC1967Utils",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3036,
                                        "src": "6354:12:3",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_contract$_ERC1967Utils_$3036_$",
                                          "typeString": "type(library ERC1967Utils)"
                                        }
                                      },
                                      "id": 991,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberLocation": "6367:16:3",
                                      "memberName": "upgradeToAndCall",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 2851,
                                      "src": "6354:29:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$__$",
                                        "typeString": "function (address,bytes memory)"
                                      }
                                    },
                                    "id": 994,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "6354:54:3",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_tuple$__$",
                                      "typeString": "tuple()"
                                    }
                                  },
                                  "id": 995,
                                  "nodeType": "ExpressionStatement",
                                  "src": "6354:54:3"
                                }
                              ]
                            },
                            "errorName": "",
                            "id": 997,
                            "nodeType": "TryCatchClause",
                            "parameters": {
                              "id": 978,
                              "nodeType": "ParameterList",
                              "parameters": [
                                {
                                  "constant": false,
                                  "id": 977,
                                  "mutability": "mutable",
                                  "name": "slot",
                                  "nameLocation": "6201:4:3",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 997,
                                  "src": "6193:12:3",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "typeName": {
                                    "id": 976,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "6193:7:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "src": "6192:14:3"
                            },
                            "src": "6184:235:3"
                          },
                          {
                            "block": {
                              "id": 1004,
                              "nodeType": "Block",
                              "src": "6426:138:3",
                              "statements": [
                                {
                                  "errorCall": {
                                    "arguments": [
                                      {
                                        "id": 1001,
                                        "name": "newImplementation",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 966,
                                        "src": "6535:17:3",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "expression": {
                                        "id": 998,
                                        "name": "ERC1967Utils",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3036,
                                        "src": "6493:12:3",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_contract$_ERC1967Utils_$3036_$",
                                          "typeString": "type(library ERC1967Utils)"
                                        }
                                      },
                                      "id": 1000,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberLocation": "6506:28:3",
                                      "memberName": "ERC1967InvalidImplementation",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 2762,
                                      "src": "6493:41:3",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$",
                                        "typeString": "function (address) pure returns (error)"
                                      }
                                    },
                                    "id": 1002,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "6493:60:3",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_error",
                                      "typeString": "error"
                                    }
                                  },
                                  "id": 1003,
                                  "nodeType": "RevertStatement",
                                  "src": "6486:67:3"
                                }
                              ]
                            },
                            "errorName": "",
                            "id": 1005,
                            "nodeType": "TryCatchClause",
                            "src": "6420:144:3"
                          }
                        ],
                        "externalCall": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 972,
                                  "name": "newImplementation",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 966,
                                  "src": "6149:17:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 971,
                                "name": "IERC1822Proxiable",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2605,
                                "src": "6131:17:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC1822Proxiable_$2605_$",
                                  "typeString": "type(contract IERC1822Proxiable)"
                                }
                              },
                              "id": 973,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6131:36:3",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC1822Proxiable_$2605",
                                "typeString": "contract IERC1822Proxiable"
                              }
                            },
                            "id": 974,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "6168:13:3",
                            "memberName": "proxiableUUID",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2604,
                            "src": "6131:50:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_bytes32_$",
                              "typeString": "function () view external returns (bytes32)"
                            }
                          },
                          "id": 975,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6131:52:3",
                          "tryCall": true,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 1006,
                        "nodeType": "TryStatement",
                        "src": "6127:437:3"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 964,
                    "nodeType": "StructuredDocumentation",
                    "src": "5680:347:3",
                    "text": " @dev Performs an implementation upgrade with a security check for UUPS proxies, and additional setup call.\n As a security check, {proxiableUUID} is invoked in the new implementation, and the return value\n is expected to be the implementation slot in ERC-1967.\n Emits an {IERC1967-Upgraded} event."
                  },
                  "id": 1008,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_upgradeToAndCallUUPS",
                  "nameLocation": "6041:21:3",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 969,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 966,
                        "mutability": "mutable",
                        "name": "newImplementation",
                        "nameLocation": "6071:17:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 1008,
                        "src": "6063:25:3",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 965,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "6063:7:3",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 968,
                        "mutability": "mutable",
                        "name": "data",
                        "nameLocation": "6103:4:3",
                        "nodeType": "VariableDeclaration",
                        "scope": 1008,
                        "src": "6090:17:3",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 967,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "6090:5:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6062:46:3"
                  },
                  "returnParameters": {
                    "id": 970,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "6117:0:3"
                  },
                  "scope": 1009,
                  "src": "6032:538:3",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "private"
                }
              ],
              "scope": 1010,
              "src": "986:5586:3",
              "usedErrors": [
                576,
                579,
                854,
                859,
                2762,
                2775,
                3391,
                4664
              ],
              "usedEvents": [
                584,
                2582
              ]
            }
          ],
          "src": "115:6458:3"
        },
        "id": 3
      },
      "@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155Upgradeable.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155Upgradeable.sol",
          "exportedSymbols": {
            "Arrays": [
              4619
            ],
            "ContextUpgradeable": [
              2291
            ],
            "ERC1155Upgradeable": [
              2006
            ],
            "ERC1155Utils": [
              3381
            ],
            "ERC165Upgradeable": [
              2491
            ],
            "IERC1155": [
              3169
            ],
            "IERC1155Errors": [
              2742
            ],
            "IERC1155MetadataURI": [
              3227
            ],
            "IERC165": [
              6393
            ],
            "Initializable": [
              827
            ]
          },
          "id": 2007,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 1011,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".20"
              ],
              "nodeType": "PragmaDirective",
              "src": "109:24:4"
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC1155/IERC1155.sol",
              "file": "@openzeppelin/contracts/token/ERC1155/IERC1155.sol",
              "id": 1013,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 2007,
              "sourceUnit": 3170,
              "src": "135:76:4",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 1012,
                    "name": "IERC1155",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3169,
                    "src": "143:8:4",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol",
              "file": "@openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol",
              "id": 1015,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 2007,
              "sourceUnit": 3228,
              "src": "212:109:4",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 1014,
                    "name": "IERC1155MetadataURI",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3227,
                    "src": "220:19:4",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC1155/utils/ERC1155Utils.sol",
              "file": "@openzeppelin/contracts/token/ERC1155/utils/ERC1155Utils.sol",
              "id": 1017,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 2007,
              "sourceUnit": 3382,
              "src": "322:90:4",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 1016,
                    "name": "ERC1155Utils",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3381,
                    "src": "330:12:4",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol",
              "file": "../../utils/ContextUpgradeable.sol",
              "id": 1019,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 2007,
              "sourceUnit": 2292,
              "src": "413:70:4",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 1018,
                    "name": "ContextUpgradeable",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2291,
                    "src": "421:18:4",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/utils/introspection/IERC165.sol",
              "file": "@openzeppelin/contracts/utils/introspection/IERC165.sol",
              "id": 1021,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 2007,
              "sourceUnit": 6394,
              "src": "484:80:4",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 1020,
                    "name": "IERC165",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 6393,
                    "src": "492:7:4",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol",
              "file": "../../utils/introspection/ERC165Upgradeable.sol",
              "id": 1023,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 2007,
              "sourceUnit": 2492,
              "src": "565:82:4",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 1022,
                    "name": "ERC165Upgradeable",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2491,
                    "src": "573:17:4",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/utils/Arrays.sol",
              "file": "@openzeppelin/contracts/utils/Arrays.sol",
              "id": 1025,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 2007,
              "sourceUnit": 4620,
              "src": "648:64:4",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 1024,
                    "name": "Arrays",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4619,
                    "src": "656:6:4",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/interfaces/draft-IERC6093.sol",
              "file": "@openzeppelin/contracts/interfaces/draft-IERC6093.sol",
              "id": 1027,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 2007,
              "sourceUnit": 2743,
              "src": "713:85:4",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 1026,
                    "name": "IERC1155Errors",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2742,
                    "src": "721:14:4",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol",
              "file": "../../proxy/utils/Initializable.sol",
              "id": 1029,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 2007,
              "sourceUnit": 828,
              "src": "799:66:4",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 1028,
                    "name": "Initializable",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 827,
                    "src": "807:13:4",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "abstract": true,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 1031,
                    "name": "Initializable",
                    "nameLocations": [
                      "1092:13:4"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 827,
                    "src": "1092:13:4"
                  },
                  "id": 1032,
                  "nodeType": "InheritanceSpecifier",
                  "src": "1092:13:4"
                },
                {
                  "baseName": {
                    "id": 1033,
                    "name": "ContextUpgradeable",
                    "nameLocations": [
                      "1107:18:4"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 2291,
                    "src": "1107:18:4"
                  },
                  "id": 1034,
                  "nodeType": "InheritanceSpecifier",
                  "src": "1107:18:4"
                },
                {
                  "baseName": {
                    "id": 1035,
                    "name": "ERC165Upgradeable",
                    "nameLocations": [
                      "1127:17:4"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 2491,
                    "src": "1127:17:4"
                  },
                  "id": 1036,
                  "nodeType": "InheritanceSpecifier",
                  "src": "1127:17:4"
                },
                {
                  "baseName": {
                    "id": 1037,
                    "name": "IERC1155",
                    "nameLocations": [
                      "1146:8:4"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 3169,
                    "src": "1146:8:4"
                  },
                  "id": 1038,
                  "nodeType": "InheritanceSpecifier",
                  "src": "1146:8:4"
                },
                {
                  "baseName": {
                    "id": 1039,
                    "name": "IERC1155MetadataURI",
                    "nameLocations": [
                      "1156:19:4"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 3227,
                    "src": "1156:19:4"
                  },
                  "id": 1040,
                  "nodeType": "InheritanceSpecifier",
                  "src": "1156:19:4"
                },
                {
                  "baseName": {
                    "id": 1041,
                    "name": "IERC1155Errors",
                    "nameLocations": [
                      "1177:14:4"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 2742,
                    "src": "1177:14:4"
                  },
                  "id": 1042,
                  "nodeType": "InheritanceSpecifier",
                  "src": "1177:14:4"
                }
              ],
              "canonicalName": "ERC1155Upgradeable",
              "contractDependencies": [],
              "contractKind": "contract",
              "documentation": {
                "id": 1030,
                "nodeType": "StructuredDocumentation",
                "src": "867:184:4",
                "text": " @dev Implementation of the basic standard multi-token.\n See https://eips.ethereum.org/EIPS/eip-1155\n Originally based on code by Enjin: https://github.com/enjin/erc-1155"
              },
              "fullyImplemented": true,
              "id": 2006,
              "linearizedBaseContracts": [
                2006,
                2742,
                3227,
                3169,
                2491,
                6393,
                2291,
                827
              ],
              "name": "ERC1155Upgradeable",
              "nameLocation": "1070:18:4",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "global": false,
                  "id": 1046,
                  "libraryName": {
                    "id": 1043,
                    "name": "Arrays",
                    "nameLocations": [
                      "1204:6:4"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 4619,
                    "src": "1204:6:4"
                  },
                  "nodeType": "UsingForDirective",
                  "src": "1198:27:4",
                  "typeName": {
                    "baseType": {
                      "id": 1044,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "1215:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 1045,
                    "nodeType": "ArrayTypeName",
                    "src": "1215:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  }
                },
                {
                  "global": false,
                  "id": 1050,
                  "libraryName": {
                    "id": 1047,
                    "name": "Arrays",
                    "nameLocations": [
                      "1236:6:4"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 4619,
                    "src": "1236:6:4"
                  },
                  "nodeType": "UsingForDirective",
                  "src": "1230:27:4",
                  "typeName": {
                    "baseType": {
                      "id": 1048,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "1247:7:4",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 1049,
                    "nodeType": "ArrayTypeName",
                    "src": "1247:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  }
                },
                {
                  "canonicalName": "ERC1155Upgradeable.ERC1155Storage",
                  "documentation": {
                    "id": 1051,
                    "nodeType": "StructuredDocumentation",
                    "src": "1263:65:4",
                    "text": "@custom:storage-location erc7201:openzeppelin.storage.ERC1155"
                  },
                  "id": 1066,
                  "members": [
                    {
                      "constant": false,
                      "id": 1057,
                      "mutability": "mutable",
                      "name": "_balances",
                      "nameLocation": "1424:9:4",
                      "nodeType": "VariableDeclaration",
                      "scope": 1066,
                      "src": "1365:68:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$",
                        "typeString": "mapping(uint256 => mapping(address => uint256))"
                      },
                      "typeName": {
                        "id": 1056,
                        "keyName": "id",
                        "keyNameLocation": "1381:2:4",
                        "keyType": {
                          "id": 1052,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1373:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Mapping",
                        "src": "1365:58:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$",
                          "typeString": "mapping(uint256 => mapping(address => uint256))"
                        },
                        "valueName": "",
                        "valueNameLocation": "-1:-1:-1",
                        "valueType": {
                          "id": 1055,
                          "keyName": "account",
                          "keyNameLocation": "1403:7:4",
                          "keyType": {
                            "id": 1053,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "1395:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Mapping",
                          "src": "1387:35:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                            "typeString": "mapping(address => uint256)"
                          },
                          "valueName": "",
                          "valueNameLocation": "-1:-1:-1",
                          "valueType": {
                            "id": 1054,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "1414:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1063,
                      "mutability": "mutable",
                      "name": "_operatorApprovals",
                      "nameLocation": "1506:18:4",
                      "nodeType": "VariableDeclaration",
                      "scope": 1066,
                      "src": "1444:80:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
                        "typeString": "mapping(address => mapping(address => bool))"
                      },
                      "typeName": {
                        "id": 1062,
                        "keyName": "account",
                        "keyNameLocation": "1460:7:4",
                        "keyType": {
                          "id": 1058,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1452:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "Mapping",
                        "src": "1444:61:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
                          "typeString": "mapping(address => mapping(address => bool))"
                        },
                        "valueName": "",
                        "valueNameLocation": "-1:-1:-1",
                        "valueType": {
                          "id": 1061,
                          "keyName": "operator",
                          "keyNameLocation": "1487:8:4",
                          "keyType": {
                            "id": 1059,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "1479:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Mapping",
                          "src": "1471:33:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                            "typeString": "mapping(address => bool)"
                          },
                          "valueName": "",
                          "valueNameLocation": "-1:-1:-1",
                          "valueType": {
                            "id": 1060,
                            "name": "bool",
                            "nodeType": "ElementaryTypeName",
                            "src": "1499:4:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          }
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1065,
                      "mutability": "mutable",
                      "name": "_uri",
                      "nameLocation": "1660:4:4",
                      "nodeType": "VariableDeclaration",
                      "scope": 1066,
                      "src": "1653:11:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 1064,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "1653:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "name": "ERC1155Storage",
                  "nameLocation": "1340:14:4",
                  "nodeType": "StructDefinition",
                  "scope": 2006,
                  "src": "1333:338:4",
                  "visibility": "public"
                },
                {
                  "constant": true,
                  "id": 1069,
                  "mutability": "constant",
                  "name": "ERC1155StorageLocation",
                  "nameLocation": "1813:22:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 2006,
                  "src": "1788:116:4",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1067,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1788:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": {
                    "hexValue": "307838386265353336643532343063323734613362316433613162653534343832666439636161323934663038633632613763646535363966343961336334353030",
                    "id": 1068,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1838:66:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_61850824141875340645484003952679861077730695310785076753205161524670616061184_by_1",
                      "typeString": "int_const 6185...(69 digits omitted)...1184"
                    },
                    "value": "0x88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c4500"
                  },
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 1076,
                    "nodeType": "Block",
                    "src": "1989:81:4",
                    "statements": [
                      {
                        "AST": {
                          "nativeSrc": "2008:56:4",
                          "nodeType": "YulBlock",
                          "src": "2008:56:4",
                          "statements": [
                            {
                              "nativeSrc": "2022:32:4",
                              "nodeType": "YulAssignment",
                              "src": "2022:32:4",
                              "value": {
                                "name": "ERC1155StorageLocation",
                                "nativeSrc": "2032:22:4",
                                "nodeType": "YulIdentifier",
                                "src": "2032:22:4"
                              },
                              "variableNames": [
                                {
                                  "name": "$.slot",
                                  "nativeSrc": "2022:6:4",
                                  "nodeType": "YulIdentifier",
                                  "src": "2022:6:4"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "paris",
                        "externalReferences": [
                          {
                            "declaration": 1073,
                            "isOffset": false,
                            "isSlot": true,
                            "src": "2022:6:4",
                            "suffix": "slot",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1069,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "2032:22:4",
                            "valueSize": 1
                          }
                        ],
                        "id": 1075,
                        "nodeType": "InlineAssembly",
                        "src": "1999:65:4"
                      }
                    ]
                  },
                  "id": 1077,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_getERC1155Storage",
                  "nameLocation": "1920:18:4",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1070,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1938:2:4"
                  },
                  "returnParameters": {
                    "id": 1074,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1073,
                        "mutability": "mutable",
                        "name": "$",
                        "nameLocation": "1986:1:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1077,
                        "src": "1963:24:4",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ERC1155Storage_$1066_storage_ptr",
                          "typeString": "struct ERC1155Upgradeable.ERC1155Storage"
                        },
                        "typeName": {
                          "id": 1072,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 1071,
                            "name": "ERC1155Storage",
                            "nameLocations": [
                              "1963:14:4"
                            ],
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 1066,
                            "src": "1963:14:4"
                          },
                          "referencedDeclaration": 1066,
                          "src": "1963:14:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ERC1155Storage_$1066_storage_ptr",
                            "typeString": "struct ERC1155Upgradeable.ERC1155Storage"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1962:26:4"
                  },
                  "scope": 2006,
                  "src": "1911:159:4",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 1089,
                    "nodeType": "Block",
                    "src": "2189:47:4",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1086,
                              "name": "uri_",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1080,
                              "src": "2224:4:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 1085,
                            "name": "__ERC1155_init_unchained",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1102,
                            "src": "2199:24:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (string memory)"
                            }
                          },
                          "id": 1087,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2199:30:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1088,
                        "nodeType": "ExpressionStatement",
                        "src": "2199:30:4"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1078,
                    "nodeType": "StructuredDocumentation",
                    "src": "2076:38:4",
                    "text": " @dev See {_setURI}."
                  },
                  "id": 1090,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 1083,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 1082,
                        "name": "onlyInitializing",
                        "nameLocations": [
                          "2172:16:4"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 722,
                        "src": "2172:16:4"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "2172:16:4"
                    }
                  ],
                  "name": "__ERC1155_init",
                  "nameLocation": "2128:14:4",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1081,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1080,
                        "mutability": "mutable",
                        "name": "uri_",
                        "nameLocation": "2157:4:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1090,
                        "src": "2143:18:4",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 1079,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "2143:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2142:20:4"
                  },
                  "returnParameters": {
                    "id": 1084,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2189:0:4"
                  },
                  "scope": 2006,
                  "src": "2119:117:4",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1101,
                    "nodeType": "Block",
                    "src": "2322:30:4",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1098,
                              "name": "uri_",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1092,
                              "src": "2340:4:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 1097,
                            "name": "_setURI",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1759,
                            "src": "2332:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (string memory)"
                            }
                          },
                          "id": 1099,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2332:13:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1100,
                        "nodeType": "ExpressionStatement",
                        "src": "2332:13:4"
                      }
                    ]
                  },
                  "id": 1102,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 1095,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 1094,
                        "name": "onlyInitializing",
                        "nameLocations": [
                          "2305:16:4"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 722,
                        "src": "2305:16:4"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "2305:16:4"
                    }
                  ],
                  "name": "__ERC1155_init_unchained",
                  "nameLocation": "2251:24:4",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1093,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1092,
                        "mutability": "mutable",
                        "name": "uri_",
                        "nameLocation": "2290:4:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1102,
                        "src": "2276:18:4",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 1091,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "2276:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2275:20:4"
                  },
                  "returnParameters": {
                    "id": 1096,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2322:0:4"
                  },
                  "scope": 2006,
                  "src": "2242:110:4",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    2490,
                    6392
                  ],
                  "body": {
                    "id": 1132,
                    "nodeType": "Block",
                    "src": "2505:197:4",
                    "statements": [
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 1130,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "id": 1125,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "commonType": {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              },
                              "id": 1118,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 1113,
                                "name": "interfaceId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1105,
                                "src": "2534:11:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "expression": {
                                  "arguments": [
                                    {
                                      "id": 1115,
                                      "name": "IERC1155",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3169,
                                      "src": "2554:8:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_IERC1155_$3169_$",
                                        "typeString": "type(contract IERC1155)"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_type$_t_contract$_IERC1155_$3169_$",
                                        "typeString": "type(contract IERC1155)"
                                      }
                                    ],
                                    "id": 1114,
                                    "name": "type",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -27,
                                    "src": "2549:4:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                      "typeString": "function () pure"
                                    }
                                  },
                                  "id": 1116,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "2549:14:4",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_meta_type_t_contract$_IERC1155_$3169",
                                    "typeString": "type(contract IERC1155)"
                                  }
                                },
                                "id": 1117,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberLocation": "2564:11:4",
                                "memberName": "interfaceId",
                                "nodeType": "MemberAccess",
                                "src": "2549:26:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              },
                              "src": "2534:41:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "||",
                            "rightExpression": {
                              "commonType": {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              },
                              "id": 1124,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 1119,
                                "name": "interfaceId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1105,
                                "src": "2591:11:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "expression": {
                                  "arguments": [
                                    {
                                      "id": 1121,
                                      "name": "IERC1155MetadataURI",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3227,
                                      "src": "2611:19:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_IERC1155MetadataURI_$3227_$",
                                        "typeString": "type(contract IERC1155MetadataURI)"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_type$_t_contract$_IERC1155MetadataURI_$3227_$",
                                        "typeString": "type(contract IERC1155MetadataURI)"
                                      }
                                    ],
                                    "id": 1120,
                                    "name": "type",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -27,
                                    "src": "2606:4:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                      "typeString": "function () pure"
                                    }
                                  },
                                  "id": 1122,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "2606:25:4",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_meta_type_t_contract$_IERC1155MetadataURI_$3227",
                                    "typeString": "type(contract IERC1155MetadataURI)"
                                  }
                                },
                                "id": 1123,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberLocation": "2632:11:4",
                                "memberName": "interfaceId",
                                "nodeType": "MemberAccess",
                                "src": "2606:37:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              },
                              "src": "2591:52:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "src": "2534:109:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "||",
                          "rightExpression": {
                            "arguments": [
                              {
                                "id": 1128,
                                "name": "interfaceId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1105,
                                "src": "2683:11:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              ],
                              "expression": {
                                "id": 1126,
                                "name": "super",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -25,
                                "src": "2659:5:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_super$_ERC1155Upgradeable_$2006_$",
                                  "typeString": "type(contract super ERC1155Upgradeable)"
                                }
                              },
                              "id": 1127,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "2665:17:4",
                              "memberName": "supportsInterface",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 2490,
                              "src": "2659:23:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_bytes4_$returns$_t_bool_$",
                                "typeString": "function (bytes4) view returns (bool)"
                              }
                            },
                            "id": 1129,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2659:36:4",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "2534:161:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 1112,
                        "id": 1131,
                        "nodeType": "Return",
                        "src": "2515:180:4"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1103,
                    "nodeType": "StructuredDocumentation",
                    "src": "2358:23:4",
                    "text": "@inheritdoc IERC165"
                  },
                  "functionSelector": "01ffc9a7",
                  "id": 1133,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "supportsInterface",
                  "nameLocation": "2395:17:4",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 1109,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [
                      {
                        "id": 1107,
                        "name": "ERC165Upgradeable",
                        "nameLocations": [
                          "2462:17:4"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 2491,
                        "src": "2462:17:4"
                      },
                      {
                        "id": 1108,
                        "name": "IERC165",
                        "nameLocations": [
                          "2481:7:4"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 6393,
                        "src": "2481:7:4"
                      }
                    ],
                    "src": "2453:36:4"
                  },
                  "parameters": {
                    "id": 1106,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1105,
                        "mutability": "mutable",
                        "name": "interfaceId",
                        "nameLocation": "2420:11:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1133,
                        "src": "2413:18:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "typeName": {
                          "id": 1104,
                          "name": "bytes4",
                          "nodeType": "ElementaryTypeName",
                          "src": "2413:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2412:20:4"
                  },
                  "returnParameters": {
                    "id": 1112,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1111,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1133,
                        "src": "2499:4:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 1110,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "2499:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2498:6:4"
                  },
                  "scope": 2006,
                  "src": "2386:316:4",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3226
                  ],
                  "body": {
                    "id": 1150,
                    "nodeType": "Block",
                    "src": "3176:87:4",
                    "statements": [
                      {
                        "assignments": [
                          1143
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1143,
                            "mutability": "mutable",
                            "name": "$",
                            "nameLocation": "3209:1:4",
                            "nodeType": "VariableDeclaration",
                            "scope": 1150,
                            "src": "3186:24:4",
                            "stateVariable": false,
                            "storageLocation": "storage",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ERC1155Storage_$1066_storage_ptr",
                              "typeString": "struct ERC1155Upgradeable.ERC1155Storage"
                            },
                            "typeName": {
                              "id": 1142,
                              "nodeType": "UserDefinedTypeName",
                              "pathNode": {
                                "id": 1141,
                                "name": "ERC1155Storage",
                                "nameLocations": [
                                  "3186:14:4"
                                ],
                                "nodeType": "IdentifierPath",
                                "referencedDeclaration": 1066,
                                "src": "3186:14:4"
                              },
                              "referencedDeclaration": 1066,
                              "src": "3186:14:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_ERC1155Storage_$1066_storage_ptr",
                                "typeString": "struct ERC1155Upgradeable.ERC1155Storage"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1146,
                        "initialValue": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 1144,
                            "name": "_getERC1155Storage",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1077,
                            "src": "3213:18:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_ERC1155Storage_$1066_storage_ptr_$",
                              "typeString": "function () pure returns (struct ERC1155Upgradeable.ERC1155Storage storage pointer)"
                            }
                          },
                          "id": 1145,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3213:20:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ERC1155Storage_$1066_storage_ptr",
                            "typeString": "struct ERC1155Upgradeable.ERC1155Storage storage pointer"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3186:47:4"
                      },
                      {
                        "expression": {
                          "expression": {
                            "id": 1147,
                            "name": "$",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1143,
                            "src": "3250:1:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ERC1155Storage_$1066_storage_ptr",
                              "typeString": "struct ERC1155Upgradeable.ERC1155Storage storage pointer"
                            }
                          },
                          "id": 1148,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "3252:4:4",
                          "memberName": "_uri",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1065,
                          "src": "3250:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        "functionReturnParameters": 1140,
                        "id": 1149,
                        "nodeType": "Return",
                        "src": "3243:13:4"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1134,
                    "nodeType": "StructuredDocumentation",
                    "src": "2708:388:4",
                    "text": " @dev See {IERC1155MetadataURI-uri}.\n This implementation returns the same URI for *all* token types. It relies\n on the token type ID substitution mechanism\n https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the ERC].\n Clients calling this function must replace the `\\{id\\}` substring with the\n actual token type ID."
                  },
                  "functionSelector": "0e89341c",
                  "id": 1151,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "uri",
                  "nameLocation": "3110:3:4",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1137,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1136,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1151,
                        "src": "3114:7:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1135,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3114:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3113:18:4"
                  },
                  "returnParameters": {
                    "id": 1140,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1139,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1151,
                        "src": "3161:13:4",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 1138,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "3161:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3160:15:4"
                  },
                  "scope": 2006,
                  "src": "3101:162:4",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3107
                  ],
                  "body": {
                    "id": 1174,
                    "nodeType": "Block",
                    "src": "3384:105:4",
                    "statements": [
                      {
                        "assignments": [
                          1163
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1163,
                            "mutability": "mutable",
                            "name": "$",
                            "nameLocation": "3417:1:4",
                            "nodeType": "VariableDeclaration",
                            "scope": 1174,
                            "src": "3394:24:4",
                            "stateVariable": false,
                            "storageLocation": "storage",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ERC1155Storage_$1066_storage_ptr",
                              "typeString": "struct ERC1155Upgradeable.ERC1155Storage"
                            },
                            "typeName": {
                              "id": 1162,
                              "nodeType": "UserDefinedTypeName",
                              "pathNode": {
                                "id": 1161,
                                "name": "ERC1155Storage",
                                "nameLocations": [
                                  "3394:14:4"
                                ],
                                "nodeType": "IdentifierPath",
                                "referencedDeclaration": 1066,
                                "src": "3394:14:4"
                              },
                              "referencedDeclaration": 1066,
                              "src": "3394:14:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_ERC1155Storage_$1066_storage_ptr",
                                "typeString": "struct ERC1155Upgradeable.ERC1155Storage"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1166,
                        "initialValue": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 1164,
                            "name": "_getERC1155Storage",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1077,
                            "src": "3421:18:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_ERC1155Storage_$1066_storage_ptr_$",
                              "typeString": "function () pure returns (struct ERC1155Upgradeable.ERC1155Storage storage pointer)"
                            }
                          },
                          "id": 1165,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3421:20:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ERC1155Storage_$1066_storage_ptr",
                            "typeString": "struct ERC1155Upgradeable.ERC1155Storage storage pointer"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3394:47:4"
                      },
                      {
                        "expression": {
                          "baseExpression": {
                            "baseExpression": {
                              "expression": {
                                "id": 1167,
                                "name": "$",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1163,
                                "src": "3458:1:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_ERC1155Storage_$1066_storage_ptr",
                                  "typeString": "struct ERC1155Upgradeable.ERC1155Storage storage pointer"
                                }
                              },
                              "id": 1168,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "3460:9:4",
                              "memberName": "_balances",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1057,
                              "src": "3458:11:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$",
                                "typeString": "mapping(uint256 => mapping(address => uint256))"
                              }
                            },
                            "id": 1170,
                            "indexExpression": {
                              "id": 1169,
                              "name": "id",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1156,
                              "src": "3470:2:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "3458:15:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 1172,
                          "indexExpression": {
                            "id": 1171,
                            "name": "account",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1154,
                            "src": "3474:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "3458:24:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 1160,
                        "id": 1173,
                        "nodeType": "Return",
                        "src": "3451:31:4"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1152,
                    "nodeType": "StructuredDocumentation",
                    "src": "3269:24:4",
                    "text": "@inheritdoc IERC1155"
                  },
                  "functionSelector": "00fdd58e",
                  "id": 1175,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "balanceOf",
                  "nameLocation": "3307:9:4",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1157,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1154,
                        "mutability": "mutable",
                        "name": "account",
                        "nameLocation": "3325:7:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1175,
                        "src": "3317:15:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1153,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3317:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1156,
                        "mutability": "mutable",
                        "name": "id",
                        "nameLocation": "3342:2:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1175,
                        "src": "3334:10:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1155,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3334:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3316:29:4"
                  },
                  "returnParameters": {
                    "id": 1160,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1159,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1175,
                        "src": "3375:7:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1158,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3375:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3374:9:4"
                  },
                  "scope": 2006,
                  "src": "3298:191:4",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3120
                  ],
                  "body": {
                    "id": 1244,
                    "nodeType": "Block",
                    "src": "3788:410:4",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1192,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 1188,
                              "name": "accounts",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1179,
                              "src": "3802:8:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                "typeString": "address[] memory"
                              }
                            },
                            "id": 1189,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "3811:6:4",
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "3802:15:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "expression": {
                              "id": 1190,
                              "name": "ids",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1182,
                              "src": "3821:3:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            },
                            "id": 1191,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "3825:6:4",
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "3821:10:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3802:29:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1201,
                        "nodeType": "IfStatement",
                        "src": "3798:121:4",
                        "trueBody": {
                          "id": 1200,
                          "nodeType": "Block",
                          "src": "3833:86:4",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "expression": {
                                      "id": 1194,
                                      "name": "ids",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1182,
                                      "src": "3880:3:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                        "typeString": "uint256[] memory"
                                      }
                                    },
                                    "id": 1195,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "3884:6:4",
                                    "memberName": "length",
                                    "nodeType": "MemberAccess",
                                    "src": "3880:10:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "expression": {
                                      "id": 1196,
                                      "name": "accounts",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1179,
                                      "src": "3892:8:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                        "typeString": "address[] memory"
                                      }
                                    },
                                    "id": 1197,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "3901:6:4",
                                    "memberName": "length",
                                    "nodeType": "MemberAccess",
                                    "src": "3892:15:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 1193,
                                  "name": "ERC1155InvalidArrayLength",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2741,
                                  "src": "3854:25:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint256_$_t_uint256_$returns$_t_error_$",
                                    "typeString": "function (uint256,uint256) pure returns (error)"
                                  }
                                },
                                "id": 1198,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3854:54:4",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 1199,
                              "nodeType": "RevertStatement",
                              "src": "3847:61:4"
                            }
                          ]
                        }
                      },
                      {
                        "assignments": [
                          1206
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1206,
                            "mutability": "mutable",
                            "name": "batchBalances",
                            "nameLocation": "3946:13:4",
                            "nodeType": "VariableDeclaration",
                            "scope": 1244,
                            "src": "3929:30:4",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                              "typeString": "uint256[]"
                            },
                            "typeName": {
                              "baseType": {
                                "id": 1204,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "3929:7:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1205,
                              "nodeType": "ArrayTypeName",
                              "src": "3929:9:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                                "typeString": "uint256[]"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1213,
                        "initialValue": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 1210,
                                "name": "accounts",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1179,
                                "src": "3976:8:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                  "typeString": "address[] memory"
                                }
                              },
                              "id": 1211,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "3985:6:4",
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "src": "3976:15:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1209,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "NewExpression",
                            "src": "3962:13:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                              "typeString": "function (uint256) pure returns (uint256[] memory)"
                            },
                            "typeName": {
                              "baseType": {
                                "id": 1207,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "3966:7:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1208,
                              "nodeType": "ArrayTypeName",
                              "src": "3966:9:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                                "typeString": "uint256[]"
                              }
                            }
                          },
                          "id": 1212,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3962:30:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                            "typeString": "uint256[] memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3929:63:4"
                      },
                      {
                        "body": {
                          "id": 1240,
                          "nodeType": "Block",
                          "src": "4049:112:4",
                          "statements": [
                            {
                              "expression": {
                                "id": 1238,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "baseExpression": {
                                    "id": 1225,
                                    "name": "batchBalances",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1206,
                                    "src": "4063:13:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                      "typeString": "uint256[] memory"
                                    }
                                  },
                                  "id": 1227,
                                  "indexExpression": {
                                    "id": 1226,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1215,
                                    "src": "4077:1:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "4063:16:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "id": 1231,
                                          "name": "i",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1215,
                                          "src": "4120:1:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "expression": {
                                          "id": 1229,
                                          "name": "accounts",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1179,
                                          "src": "4092:8:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                            "typeString": "address[] memory"
                                          }
                                        },
                                        "id": 1230,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberLocation": "4101:18:4",
                                        "memberName": "unsafeMemoryAccess",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 4511,
                                        "src": "4092:27:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_pure$_t_array$_t_address_$dyn_memory_ptr_$_t_uint256_$returns$_t_address_$attached_to$_t_array$_t_address_$dyn_memory_ptr_$",
                                          "typeString": "function (address[] memory,uint256) pure returns (address)"
                                        }
                                      },
                                      "id": 1232,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "nameLocations": [],
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "4092:30:4",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    {
                                      "arguments": [
                                        {
                                          "id": 1235,
                                          "name": "i",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1215,
                                          "src": "4147:1:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "expression": {
                                          "id": 1233,
                                          "name": "ids",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1182,
                                          "src": "4124:3:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                            "typeString": "uint256[] memory"
                                          }
                                        },
                                        "id": 1234,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberLocation": "4128:18:4",
                                        "memberName": "unsafeMemoryAccess",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 4537,
                                        "src": "4124:22:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$returns$_t_uint256_$attached_to$_t_array$_t_uint256_$dyn_memory_ptr_$",
                                          "typeString": "function (uint256[] memory,uint256) pure returns (uint256)"
                                        }
                                      },
                                      "id": 1236,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "nameLocations": [],
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "4124:25:4",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 1228,
                                    "name": "balanceOf",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1175,
                                    "src": "4082:9:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_uint256_$",
                                      "typeString": "function (address,uint256) view returns (uint256)"
                                    }
                                  },
                                  "id": 1237,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "4082:68:4",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "4063:87:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1239,
                              "nodeType": "ExpressionStatement",
                              "src": "4063:87:4"
                            }
                          ]
                        },
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1221,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 1218,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1215,
                            "src": "4023:1:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "expression": {
                              "id": 1219,
                              "name": "accounts",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1179,
                              "src": "4027:8:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                "typeString": "address[] memory"
                              }
                            },
                            "id": 1220,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "4036:6:4",
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "4027:15:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "4023:19:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1241,
                        "initializationExpression": {
                          "assignments": [
                            1215
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 1215,
                              "mutability": "mutable",
                              "name": "i",
                              "nameLocation": "4016:1:4",
                              "nodeType": "VariableDeclaration",
                              "scope": 1241,
                              "src": "4008:9:4",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 1214,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "4008:7:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "visibility": "internal"
                            }
                          ],
                          "id": 1217,
                          "initialValue": {
                            "hexValue": "30",
                            "id": 1216,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4020:1:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "4008:13:4"
                        },
                        "isSimpleCounterLoop": true,
                        "loopExpression": {
                          "expression": {
                            "id": 1223,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": true,
                            "src": "4044:3:4",
                            "subExpression": {
                              "id": 1222,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1215,
                              "src": "4046:1:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1224,
                          "nodeType": "ExpressionStatement",
                          "src": "4044:3:4"
                        },
                        "nodeType": "ForStatement",
                        "src": "4003:158:4"
                      },
                      {
                        "expression": {
                          "id": 1242,
                          "name": "batchBalances",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1206,
                          "src": "4178:13:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                            "typeString": "uint256[] memory"
                          }
                        },
                        "functionReturnParameters": 1187,
                        "id": 1243,
                        "nodeType": "Return",
                        "src": "4171:20:4"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1176,
                    "nodeType": "StructuredDocumentation",
                    "src": "3495:146:4",
                    "text": " @dev See {IERC1155-balanceOfBatch}.\n Requirements:\n - `accounts` and `ids` must have the same length."
                  },
                  "functionSelector": "4e1273f4",
                  "id": 1245,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "balanceOfBatch",
                  "nameLocation": "3655:14:4",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1183,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1179,
                        "mutability": "mutable",
                        "name": "accounts",
                        "nameLocation": "3696:8:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1245,
                        "src": "3679:25:4",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 1177,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "3679:7:4",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 1178,
                          "nodeType": "ArrayTypeName",
                          "src": "3679:9:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                            "typeString": "address[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1182,
                        "mutability": "mutable",
                        "name": "ids",
                        "nameLocation": "3731:3:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1245,
                        "src": "3714:20:4",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 1180,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "3714:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1181,
                          "nodeType": "ArrayTypeName",
                          "src": "3714:9:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                            "typeString": "uint256[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3669:71:4"
                  },
                  "returnParameters": {
                    "id": 1187,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1186,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1245,
                        "src": "3770:16:4",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 1184,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "3770:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1185,
                          "nodeType": "ArrayTypeName",
                          "src": "3770:9:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                            "typeString": "uint256[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3769:18:4"
                  },
                  "scope": 2006,
                  "src": "3646:552:4",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3128
                  ],
                  "body": {
                    "id": 1260,
                    "nodeType": "Block",
                    "src": "4308:69:4",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 1254,
                                "name": "_msgSender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2273,
                                "src": "4337:10:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                  "typeString": "function () view returns (address)"
                                }
                              },
                              "id": 1255,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4337:12:4",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1256,
                              "name": "operator",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1248,
                              "src": "4351:8:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1257,
                              "name": "approved",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1250,
                              "src": "4361:8:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 1253,
                            "name": "_setApprovalForAll",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1989,
                            "src": "4318:18:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bool_$returns$__$",
                              "typeString": "function (address,address,bool)"
                            }
                          },
                          "id": 1258,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4318:52:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1259,
                        "nodeType": "ExpressionStatement",
                        "src": "4318:52:4"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1246,
                    "nodeType": "StructuredDocumentation",
                    "src": "4204:24:4",
                    "text": "@inheritdoc IERC1155"
                  },
                  "functionSelector": "a22cb465",
                  "id": 1261,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setApprovalForAll",
                  "nameLocation": "4242:17:4",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1251,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1248,
                        "mutability": "mutable",
                        "name": "operator",
                        "nameLocation": "4268:8:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1261,
                        "src": "4260:16:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1247,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4260:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1250,
                        "mutability": "mutable",
                        "name": "approved",
                        "nameLocation": "4283:8:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1261,
                        "src": "4278:13:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 1249,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "4278:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4259:33:4"
                  },
                  "returnParameters": {
                    "id": 1252,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "4308:0:4"
                  },
                  "scope": 2006,
                  "src": "4233:144:4",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3138
                  ],
                  "body": {
                    "id": 1284,
                    "nodeType": "Block",
                    "src": "4508:120:4",
                    "statements": [
                      {
                        "assignments": [
                          1273
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1273,
                            "mutability": "mutable",
                            "name": "$",
                            "nameLocation": "4541:1:4",
                            "nodeType": "VariableDeclaration",
                            "scope": 1284,
                            "src": "4518:24:4",
                            "stateVariable": false,
                            "storageLocation": "storage",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ERC1155Storage_$1066_storage_ptr",
                              "typeString": "struct ERC1155Upgradeable.ERC1155Storage"
                            },
                            "typeName": {
                              "id": 1272,
                              "nodeType": "UserDefinedTypeName",
                              "pathNode": {
                                "id": 1271,
                                "name": "ERC1155Storage",
                                "nameLocations": [
                                  "4518:14:4"
                                ],
                                "nodeType": "IdentifierPath",
                                "referencedDeclaration": 1066,
                                "src": "4518:14:4"
                              },
                              "referencedDeclaration": 1066,
                              "src": "4518:14:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_ERC1155Storage_$1066_storage_ptr",
                                "typeString": "struct ERC1155Upgradeable.ERC1155Storage"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1276,
                        "initialValue": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 1274,
                            "name": "_getERC1155Storage",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1077,
                            "src": "4545:18:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_ERC1155Storage_$1066_storage_ptr_$",
                              "typeString": "function () pure returns (struct ERC1155Upgradeable.ERC1155Storage storage pointer)"
                            }
                          },
                          "id": 1275,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4545:20:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ERC1155Storage_$1066_storage_ptr",
                            "typeString": "struct ERC1155Upgradeable.ERC1155Storage storage pointer"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4518:47:4"
                      },
                      {
                        "expression": {
                          "baseExpression": {
                            "baseExpression": {
                              "expression": {
                                "id": 1277,
                                "name": "$",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1273,
                                "src": "4582:1:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_ERC1155Storage_$1066_storage_ptr",
                                  "typeString": "struct ERC1155Upgradeable.ERC1155Storage storage pointer"
                                }
                              },
                              "id": 1278,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "4584:18:4",
                              "memberName": "_operatorApprovals",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1063,
                              "src": "4582:20:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
                                "typeString": "mapping(address => mapping(address => bool))"
                              }
                            },
                            "id": 1280,
                            "indexExpression": {
                              "id": 1279,
                              "name": "account",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1264,
                              "src": "4603:7:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "4582:29:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                              "typeString": "mapping(address => bool)"
                            }
                          },
                          "id": 1282,
                          "indexExpression": {
                            "id": 1281,
                            "name": "operator",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1266,
                            "src": "4612:8:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "4582:39:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 1270,
                        "id": 1283,
                        "nodeType": "Return",
                        "src": "4575:46:4"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1262,
                    "nodeType": "StructuredDocumentation",
                    "src": "4383:24:4",
                    "text": "@inheritdoc IERC1155"
                  },
                  "functionSelector": "e985e9c5",
                  "id": 1285,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isApprovedForAll",
                  "nameLocation": "4421:16:4",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1267,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1264,
                        "mutability": "mutable",
                        "name": "account",
                        "nameLocation": "4446:7:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1285,
                        "src": "4438:15:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1263,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4438:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1266,
                        "mutability": "mutable",
                        "name": "operator",
                        "nameLocation": "4463:8:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1285,
                        "src": "4455:16:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1265,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4455:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4437:35:4"
                  },
                  "returnParameters": {
                    "id": 1270,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1269,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 1285,
                        "src": "4502:4:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 1268,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "4502:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4501:6:4"
                  },
                  "scope": 2006,
                  "src": "4412:216:4",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3152
                  ],
                  "body": {
                    "id": 1328,
                    "nodeType": "Block",
                    "src": "4776:238:4",
                    "statements": [
                      {
                        "assignments": [
                          1300
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1300,
                            "mutability": "mutable",
                            "name": "sender",
                            "nameLocation": "4794:6:4",
                            "nodeType": "VariableDeclaration",
                            "scope": 1328,
                            "src": "4786:14:4",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 1299,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "4786:7:4",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1303,
                        "initialValue": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 1301,
                            "name": "_msgSender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2273,
                            "src": "4803:10:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                              "typeString": "function () view returns (address)"
                            }
                          },
                          "id": 1302,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4803:12:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4786:29:4"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 1312,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "id": 1306,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 1304,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1288,
                              "src": "4829:4:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "!=",
                            "rightExpression": {
                              "id": 1305,
                              "name": "sender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1300,
                              "src": "4837:6:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "src": "4829:14:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "id": 1311,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "!",
                            "prefix": true,
                            "src": "4847:31:4",
                            "subExpression": {
                              "arguments": [
                                {
                                  "id": 1308,
                                  "name": "from",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1288,
                                  "src": "4865:4:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "id": 1309,
                                  "name": "sender",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1300,
                                  "src": "4871:6:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 1307,
                                "name": "isApprovedForAll",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1285,
                                "src": "4848:16:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$returns$_t_bool_$",
                                  "typeString": "function (address,address) view returns (bool)"
                                }
                              },
                              "id": 1310,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4848:30:4",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "4829:49:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1319,
                        "nodeType": "IfStatement",
                        "src": "4825:129:4",
                        "trueBody": {
                          "id": 1318,
                          "nodeType": "Block",
                          "src": "4880:74:4",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "id": 1314,
                                    "name": "sender",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1300,
                                    "src": "4930:6:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "id": 1315,
                                    "name": "from",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1288,
                                    "src": "4938:4:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 1313,
                                  "name": "ERC1155MissingApprovalForAll",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2724,
                                  "src": "4901:28:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_address_$_t_address_$returns$_t_error_$",
                                    "typeString": "function (address,address) pure returns (error)"
                                  }
                                },
                                "id": 1316,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4901:42:4",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 1317,
                              "nodeType": "RevertStatement",
                              "src": "4894:49:4"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1321,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1288,
                              "src": "4981:4:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1322,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1290,
                              "src": "4987:2:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1323,
                              "name": "id",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1292,
                              "src": "4991:2:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 1324,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1294,
                              "src": "4995:5:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 1325,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1296,
                              "src": "5002:4:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 1320,
                            "name": "_safeTransferFrom",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1685,
                            "src": "4963:17:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$",
                              "typeString": "function (address,address,uint256,uint256,bytes memory)"
                            }
                          },
                          "id": 1326,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4963:44:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1327,
                        "nodeType": "ExpressionStatement",
                        "src": "4963:44:4"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1286,
                    "nodeType": "StructuredDocumentation",
                    "src": "4634:24:4",
                    "text": "@inheritdoc IERC1155"
                  },
                  "functionSelector": "f242432a",
                  "id": 1329,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "safeTransferFrom",
                  "nameLocation": "4672:16:4",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1297,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1288,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "4697:4:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1329,
                        "src": "4689:12:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1287,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4689:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1290,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "4711:2:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1329,
                        "src": "4703:10:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1289,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4703:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1292,
                        "mutability": "mutable",
                        "name": "id",
                        "nameLocation": "4723:2:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1329,
                        "src": "4715:10:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1291,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4715:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1294,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "4735:5:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1329,
                        "src": "4727:13:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1293,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4727:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1296,
                        "mutability": "mutable",
                        "name": "data",
                        "nameLocation": "4755:4:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1329,
                        "src": "4742:17:4",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 1295,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "4742:5:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4688:72:4"
                  },
                  "returnParameters": {
                    "id": 1298,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "4776:0:4"
                  },
                  "scope": 2006,
                  "src": "4663:351:4",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    3168
                  ],
                  "body": {
                    "id": 1374,
                    "nodeType": "Block",
                    "src": "5233:245:4",
                    "statements": [
                      {
                        "assignments": [
                          1346
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1346,
                            "mutability": "mutable",
                            "name": "sender",
                            "nameLocation": "5251:6:4",
                            "nodeType": "VariableDeclaration",
                            "scope": 1374,
                            "src": "5243:14:4",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 1345,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "5243:7:4",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1349,
                        "initialValue": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 1347,
                            "name": "_msgSender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2273,
                            "src": "5260:10:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                              "typeString": "function () view returns (address)"
                            }
                          },
                          "id": 1348,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5260:12:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "5243:29:4"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 1358,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "id": 1352,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 1350,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1332,
                              "src": "5286:4:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "!=",
                            "rightExpression": {
                              "id": 1351,
                              "name": "sender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1346,
                              "src": "5294:6:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "src": "5286:14:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "id": 1357,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "!",
                            "prefix": true,
                            "src": "5304:31:4",
                            "subExpression": {
                              "arguments": [
                                {
                                  "id": 1354,
                                  "name": "from",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1332,
                                  "src": "5322:4:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "id": 1355,
                                  "name": "sender",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1346,
                                  "src": "5328:6:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 1353,
                                "name": "isApprovedForAll",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1285,
                                "src": "5305:16:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$returns$_t_bool_$",
                                  "typeString": "function (address,address) view returns (bool)"
                                }
                              },
                              "id": 1356,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5305:30:4",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "5286:49:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1365,
                        "nodeType": "IfStatement",
                        "src": "5282:129:4",
                        "trueBody": {
                          "id": 1364,
                          "nodeType": "Block",
                          "src": "5337:74:4",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "id": 1360,
                                    "name": "sender",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1346,
                                    "src": "5387:6:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "id": 1361,
                                    "name": "from",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1332,
                                    "src": "5395:4:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 1359,
                                  "name": "ERC1155MissingApprovalForAll",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2724,
                                  "src": "5358:28:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_address_$_t_address_$returns$_t_error_$",
                                    "typeString": "function (address,address) pure returns (error)"
                                  }
                                },
                                "id": 1362,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "5358:42:4",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 1363,
                              "nodeType": "RevertStatement",
                              "src": "5351:49:4"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1367,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1332,
                              "src": "5443:4:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1368,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1334,
                              "src": "5449:2:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1369,
                              "name": "ids",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1337,
                              "src": "5453:3:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            },
                            {
                              "id": 1370,
                              "name": "values",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1340,
                              "src": "5458:6:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            },
                            {
                              "id": 1371,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1342,
                              "src": "5466:4:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              },
                              {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 1366,
                            "name": "_safeBatchTransferFrom",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1740,
                            "src": "5420:22:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$returns$__$",
                              "typeString": "function (address,address,uint256[] memory,uint256[] memory,bytes memory)"
                            }
                          },
                          "id": 1372,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5420:51:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1373,
                        "nodeType": "ExpressionStatement",
                        "src": "5420:51:4"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1330,
                    "nodeType": "StructuredDocumentation",
                    "src": "5020:24:4",
                    "text": "@inheritdoc IERC1155"
                  },
                  "functionSelector": "2eb2c2d6",
                  "id": 1375,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "safeBatchTransferFrom",
                  "nameLocation": "5058:21:4",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1343,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1332,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "5097:4:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1375,
                        "src": "5089:12:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1331,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5089:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1334,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "5119:2:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1375,
                        "src": "5111:10:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1333,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5111:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1337,
                        "mutability": "mutable",
                        "name": "ids",
                        "nameLocation": "5148:3:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1375,
                        "src": "5131:20:4",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 1335,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "5131:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1336,
                          "nodeType": "ArrayTypeName",
                          "src": "5131:9:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                            "typeString": "uint256[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1340,
                        "mutability": "mutable",
                        "name": "values",
                        "nameLocation": "5178:6:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1375,
                        "src": "5161:23:4",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 1338,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "5161:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1339,
                          "nodeType": "ArrayTypeName",
                          "src": "5161:9:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                            "typeString": "uint256[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1342,
                        "mutability": "mutable",
                        "name": "data",
                        "nameLocation": "5207:4:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1375,
                        "src": "5194:17:4",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 1341,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "5194:5:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5079:138:4"
                  },
                  "returnParameters": {
                    "id": 1344,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "5233:0:4"
                  },
                  "scope": 2006,
                  "src": "5049:429:4",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 1538,
                    "nodeType": "Block",
                    "src": "6286:1237:4",
                    "statements": [
                      {
                        "assignments": [
                          1391
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1391,
                            "mutability": "mutable",
                            "name": "$",
                            "nameLocation": "6319:1:4",
                            "nodeType": "VariableDeclaration",
                            "scope": 1538,
                            "src": "6296:24:4",
                            "stateVariable": false,
                            "storageLocation": "storage",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ERC1155Storage_$1066_storage_ptr",
                              "typeString": "struct ERC1155Upgradeable.ERC1155Storage"
                            },
                            "typeName": {
                              "id": 1390,
                              "nodeType": "UserDefinedTypeName",
                              "pathNode": {
                                "id": 1389,
                                "name": "ERC1155Storage",
                                "nameLocations": [
                                  "6296:14:4"
                                ],
                                "nodeType": "IdentifierPath",
                                "referencedDeclaration": 1066,
                                "src": "6296:14:4"
                              },
                              "referencedDeclaration": 1066,
                              "src": "6296:14:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_ERC1155Storage_$1066_storage_ptr",
                                "typeString": "struct ERC1155Upgradeable.ERC1155Storage"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1394,
                        "initialValue": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 1392,
                            "name": "_getERC1155Storage",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1077,
                            "src": "6323:18:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_ERC1155Storage_$1066_storage_ptr_$",
                              "typeString": "function () pure returns (struct ERC1155Upgradeable.ERC1155Storage storage pointer)"
                            }
                          },
                          "id": 1393,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6323:20:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ERC1155Storage_$1066_storage_ptr",
                            "typeString": "struct ERC1155Upgradeable.ERC1155Storage storage pointer"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "6296:47:4"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1399,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 1395,
                              "name": "ids",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1383,
                              "src": "6357:3:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            },
                            "id": 1396,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "6361:6:4",
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "6357:10:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "expression": {
                              "id": 1397,
                              "name": "values",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1386,
                              "src": "6371:6:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            },
                            "id": 1398,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "6378:6:4",
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "6371:13:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "6357:27:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1408,
                        "nodeType": "IfStatement",
                        "src": "6353:117:4",
                        "trueBody": {
                          "id": 1407,
                          "nodeType": "Block",
                          "src": "6386:84:4",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "expression": {
                                      "id": 1401,
                                      "name": "ids",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1383,
                                      "src": "6433:3:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                        "typeString": "uint256[] memory"
                                      }
                                    },
                                    "id": 1402,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "6437:6:4",
                                    "memberName": "length",
                                    "nodeType": "MemberAccess",
                                    "src": "6433:10:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "expression": {
                                      "id": 1403,
                                      "name": "values",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1386,
                                      "src": "6445:6:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                        "typeString": "uint256[] memory"
                                      }
                                    },
                                    "id": 1404,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "6452:6:4",
                                    "memberName": "length",
                                    "nodeType": "MemberAccess",
                                    "src": "6445:13:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 1400,
                                  "name": "ERC1155InvalidArrayLength",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2741,
                                  "src": "6407:25:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint256_$_t_uint256_$returns$_t_error_$",
                                    "typeString": "function (uint256,uint256) pure returns (error)"
                                  }
                                },
                                "id": 1405,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "6407:52:4",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 1406,
                              "nodeType": "RevertStatement",
                              "src": "6400:59:4"
                            }
                          ]
                        }
                      },
                      {
                        "assignments": [
                          1410
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1410,
                            "mutability": "mutable",
                            "name": "operator",
                            "nameLocation": "6488:8:4",
                            "nodeType": "VariableDeclaration",
                            "scope": 1538,
                            "src": "6480:16:4",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 1409,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "6480:7:4",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1413,
                        "initialValue": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 1411,
                            "name": "_msgSender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2273,
                            "src": "6499:10:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                              "typeString": "function () view returns (address)"
                            }
                          },
                          "id": 1412,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6499:12:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "6480:31:4"
                      },
                      {
                        "body": {
                          "id": 1499,
                          "nodeType": "Block",
                          "src": "6563:656:4",
                          "statements": [
                            {
                              "assignments": [
                                1426
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 1426,
                                  "mutability": "mutable",
                                  "name": "id",
                                  "nameLocation": "6585:2:4",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 1499,
                                  "src": "6577:10:4",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 1425,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "6577:7:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 1431,
                              "initialValue": {
                                "arguments": [
                                  {
                                    "id": 1429,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1415,
                                    "src": "6613:1:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "id": 1427,
                                    "name": "ids",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1383,
                                    "src": "6590:3:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                      "typeString": "uint256[] memory"
                                    }
                                  },
                                  "id": 1428,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "6594:18:4",
                                  "memberName": "unsafeMemoryAccess",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 4537,
                                  "src": "6590:22:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$returns$_t_uint256_$attached_to$_t_array$_t_uint256_$dyn_memory_ptr_$",
                                    "typeString": "function (uint256[] memory,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 1430,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "6590:25:4",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "6577:38:4"
                            },
                            {
                              "assignments": [
                                1433
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 1433,
                                  "mutability": "mutable",
                                  "name": "value",
                                  "nameLocation": "6637:5:4",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 1499,
                                  "src": "6629:13:4",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 1432,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "6629:7:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 1438,
                              "initialValue": {
                                "arguments": [
                                  {
                                    "id": 1436,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1415,
                                    "src": "6671:1:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "id": 1434,
                                    "name": "values",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1386,
                                    "src": "6645:6:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                      "typeString": "uint256[] memory"
                                    }
                                  },
                                  "id": 1435,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "6652:18:4",
                                  "memberName": "unsafeMemoryAccess",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 4537,
                                  "src": "6645:25:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$returns$_t_uint256_$attached_to$_t_array$_t_uint256_$dyn_memory_ptr_$",
                                    "typeString": "function (uint256[] memory,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 1437,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "6645:28:4",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "6629:44:4"
                            },
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                "id": 1444,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 1439,
                                  "name": "from",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1378,
                                  "src": "6692:4:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "!=",
                                "rightExpression": {
                                  "arguments": [
                                    {
                                      "hexValue": "30",
                                      "id": 1442,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "6708:1:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      }
                                    ],
                                    "id": 1441,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "6700:7:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": {
                                      "id": 1440,
                                      "name": "address",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "6700:7:4",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 1443,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "6700:10:4",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "src": "6692:18:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 1480,
                              "nodeType": "IfStatement",
                              "src": "6688:424:4",
                              "trueBody": {
                                "id": 1479,
                                "nodeType": "Block",
                                "src": "6712:400:4",
                                "statements": [
                                  {
                                    "assignments": [
                                      1446
                                    ],
                                    "declarations": [
                                      {
                                        "constant": false,
                                        "id": 1446,
                                        "mutability": "mutable",
                                        "name": "fromBalance",
                                        "nameLocation": "6738:11:4",
                                        "nodeType": "VariableDeclaration",
                                        "scope": 1479,
                                        "src": "6730:19:4",
                                        "stateVariable": false,
                                        "storageLocation": "default",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "typeName": {
                                          "id": 1445,
                                          "name": "uint256",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "6730:7:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "visibility": "internal"
                                      }
                                    ],
                                    "id": 1453,
                                    "initialValue": {
                                      "baseExpression": {
                                        "baseExpression": {
                                          "expression": {
                                            "id": 1447,
                                            "name": "$",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1391,
                                            "src": "6752:1:4",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_ERC1155Storage_$1066_storage_ptr",
                                              "typeString": "struct ERC1155Upgradeable.ERC1155Storage storage pointer"
                                            }
                                          },
                                          "id": 1448,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberLocation": "6754:9:4",
                                          "memberName": "_balances",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 1057,
                                          "src": "6752:11:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$",
                                            "typeString": "mapping(uint256 => mapping(address => uint256))"
                                          }
                                        },
                                        "id": 1450,
                                        "indexExpression": {
                                          "id": 1449,
                                          "name": "id",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1426,
                                          "src": "6764:2:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "6752:15:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                          "typeString": "mapping(address => uint256)"
                                        }
                                      },
                                      "id": 1452,
                                      "indexExpression": {
                                        "id": 1451,
                                        "name": "from",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1378,
                                        "src": "6768:4:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "6752:21:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "6730:43:4"
                                  },
                                  {
                                    "condition": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 1456,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 1454,
                                        "name": "fromBalance",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1446,
                                        "src": "6795:11:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "<",
                                      "rightExpression": {
                                        "id": 1455,
                                        "name": "value",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1433,
                                        "src": "6809:5:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "6795:19:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "id": 1465,
                                    "nodeType": "IfStatement",
                                    "src": "6791:129:4",
                                    "trueBody": {
                                      "id": 1464,
                                      "nodeType": "Block",
                                      "src": "6816:104:4",
                                      "statements": [
                                        {
                                          "errorCall": {
                                            "arguments": [
                                              {
                                                "id": 1458,
                                                "name": "from",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1378,
                                                "src": "6872:4:4",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_address",
                                                  "typeString": "address"
                                                }
                                              },
                                              {
                                                "id": 1459,
                                                "name": "fromBalance",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1446,
                                                "src": "6878:11:4",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              },
                                              {
                                                "id": 1460,
                                                "name": "value",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1433,
                                                "src": "6891:5:4",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              },
                                              {
                                                "id": 1461,
                                                "name": "id",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1426,
                                                "src": "6898:2:4",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              }
                                            ],
                                            "expression": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_address",
                                                  "typeString": "address"
                                                },
                                                {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                },
                                                {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                },
                                                {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              ],
                                              "id": 1457,
                                              "name": "ERC1155InsufficientBalance",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 2707,
                                              "src": "6845:26:4",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_function_error_pure$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_error_$",
                                                "typeString": "function (address,uint256,uint256,uint256) pure returns (error)"
                                              }
                                            },
                                            "id": 1462,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "nameLocations": [],
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "6845:56:4",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_error",
                                              "typeString": "error"
                                            }
                                          },
                                          "id": 1463,
                                          "nodeType": "RevertStatement",
                                          "src": "6838:63:4"
                                        }
                                      ]
                                    }
                                  },
                                  {
                                    "id": 1478,
                                    "nodeType": "UncheckedBlock",
                                    "src": "6937:161:4",
                                    "statements": [
                                      {
                                        "expression": {
                                          "id": 1476,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftHandSide": {
                                            "baseExpression": {
                                              "baseExpression": {
                                                "expression": {
                                                  "id": 1466,
                                                  "name": "$",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 1391,
                                                  "src": "7036:1:4",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_ERC1155Storage_$1066_storage_ptr",
                                                    "typeString": "struct ERC1155Upgradeable.ERC1155Storage storage pointer"
                                                  }
                                                },
                                                "id": 1470,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberLocation": "7038:9:4",
                                                "memberName": "_balances",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 1057,
                                                "src": "7036:11:4",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$",
                                                  "typeString": "mapping(uint256 => mapping(address => uint256))"
                                                }
                                              },
                                              "id": 1471,
                                              "indexExpression": {
                                                "id": 1468,
                                                "name": "id",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 1426,
                                                "src": "7048:2:4",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              },
                                              "isConstant": false,
                                              "isLValue": true,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "nodeType": "IndexAccess",
                                              "src": "7036:15:4",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                "typeString": "mapping(address => uint256)"
                                              }
                                            },
                                            "id": 1472,
                                            "indexExpression": {
                                              "id": 1469,
                                              "name": "from",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 1378,
                                              "src": "7052:4:4",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                              }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "nodeType": "IndexAccess",
                                            "src": "7036:21:4",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "Assignment",
                                          "operator": "=",
                                          "rightHandSide": {
                                            "commonType": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            },
                                            "id": 1475,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                              "id": 1473,
                                              "name": "fromBalance",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 1446,
                                              "src": "7060:11:4",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "-",
                                            "rightExpression": {
                                              "id": 1474,
                                              "name": "value",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 1433,
                                              "src": "7074:5:4",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "src": "7060:19:4",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "src": "7036:43:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "id": 1477,
                                        "nodeType": "ExpressionStatement",
                                        "src": "7036:43:4"
                                      }
                                    ]
                                  }
                                ]
                              }
                            },
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                "id": 1486,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 1481,
                                  "name": "to",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1380,
                                  "src": "7130:2:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "!=",
                                "rightExpression": {
                                  "arguments": [
                                    {
                                      "hexValue": "30",
                                      "id": 1484,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "7144:1:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      }
                                    ],
                                    "id": 1483,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "7136:7:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": {
                                      "id": 1482,
                                      "name": "address",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "7136:7:4",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 1485,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "7136:10:4",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "src": "7130:16:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 1498,
                              "nodeType": "IfStatement",
                              "src": "7126:83:4",
                              "trueBody": {
                                "id": 1497,
                                "nodeType": "Block",
                                "src": "7148:61:4",
                                "statements": [
                                  {
                                    "expression": {
                                      "id": 1495,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "baseExpression": {
                                          "baseExpression": {
                                            "expression": {
                                              "id": 1487,
                                              "name": "$",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 1391,
                                              "src": "7166:1:4",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_ERC1155Storage_$1066_storage_ptr",
                                                "typeString": "struct ERC1155Upgradeable.ERC1155Storage storage pointer"
                                              }
                                            },
                                            "id": 1491,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberLocation": "7168:9:4",
                                            "memberName": "_balances",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 1057,
                                            "src": "7166:11:4",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$",
                                              "typeString": "mapping(uint256 => mapping(address => uint256))"
                                            }
                                          },
                                          "id": 1492,
                                          "indexExpression": {
                                            "id": 1489,
                                            "name": "id",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1426,
                                            "src": "7178:2:4",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "IndexAccess",
                                          "src": "7166:15:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                            "typeString": "mapping(address => uint256)"
                                          }
                                        },
                                        "id": 1493,
                                        "indexExpression": {
                                          "id": 1490,
                                          "name": "to",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1380,
                                          "src": "7182:2:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": true,
                                        "nodeType": "IndexAccess",
                                        "src": "7166:19:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "+=",
                                      "rightHandSide": {
                                        "id": 1494,
                                        "name": "value",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1433,
                                        "src": "7189:5:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "7166:28:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 1496,
                                    "nodeType": "ExpressionStatement",
                                    "src": "7166:28:4"
                                  }
                                ]
                              }
                            }
                          ]
                        },
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1421,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 1418,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1415,
                            "src": "6542:1:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "expression": {
                              "id": 1419,
                              "name": "ids",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1383,
                              "src": "6546:3:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            },
                            "id": 1420,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "6550:6:4",
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "6546:10:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "6542:14:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1500,
                        "initializationExpression": {
                          "assignments": [
                            1415
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 1415,
                              "mutability": "mutable",
                              "name": "i",
                              "nameLocation": "6535:1:4",
                              "nodeType": "VariableDeclaration",
                              "scope": 1500,
                              "src": "6527:9:4",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 1414,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "6527:7:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "visibility": "internal"
                            }
                          ],
                          "id": 1417,
                          "initialValue": {
                            "hexValue": "30",
                            "id": 1416,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "6539:1:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "6527:13:4"
                        },
                        "isSimpleCounterLoop": true,
                        "loopExpression": {
                          "expression": {
                            "id": 1423,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": true,
                            "src": "6558:3:4",
                            "subExpression": {
                              "id": 1422,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1415,
                              "src": "6560:1:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1424,
                          "nodeType": "ExpressionStatement",
                          "src": "6558:3:4"
                        },
                        "nodeType": "ForStatement",
                        "src": "6522:697:4"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1504,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 1501,
                              "name": "ids",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1383,
                              "src": "7233:3:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            },
                            "id": 1502,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "7237:6:4",
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "7233:10:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "hexValue": "31",
                            "id": 1503,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "7247:1:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "7233:15:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 1536,
                          "nodeType": "Block",
                          "src": "7441:76:4",
                          "statements": [
                            {
                              "eventCall": {
                                "arguments": [
                                  {
                                    "id": 1529,
                                    "name": "operator",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1410,
                                    "src": "7474:8:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "id": 1530,
                                    "name": "from",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1378,
                                    "src": "7484:4:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "id": 1531,
                                    "name": "to",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1380,
                                    "src": "7490:2:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "id": 1532,
                                    "name": "ids",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1383,
                                    "src": "7494:3:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                      "typeString": "uint256[] memory"
                                    }
                                  },
                                  {
                                    "id": 1533,
                                    "name": "values",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1386,
                                    "src": "7499:6:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                      "typeString": "uint256[] memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                      "typeString": "uint256[] memory"
                                    },
                                    {
                                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                      "typeString": "uint256[] memory"
                                    }
                                  ],
                                  "id": 1528,
                                  "name": "TransferBatch",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3081,
                                  "src": "7460:13:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$",
                                    "typeString": "function (address,address,address,uint256[] memory,uint256[] memory)"
                                  }
                                },
                                "id": 1534,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7460:46:4",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 1535,
                              "nodeType": "EmitStatement",
                              "src": "7455:51:4"
                            }
                          ]
                        },
                        "id": 1537,
                        "nodeType": "IfStatement",
                        "src": "7229:288:4",
                        "trueBody": {
                          "id": 1527,
                          "nodeType": "Block",
                          "src": "7250:185:4",
                          "statements": [
                            {
                              "assignments": [
                                1506
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 1506,
                                  "mutability": "mutable",
                                  "name": "id",
                                  "nameLocation": "7272:2:4",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 1527,
                                  "src": "7264:10:4",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 1505,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "7264:7:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 1511,
                              "initialValue": {
                                "arguments": [
                                  {
                                    "hexValue": "30",
                                    "id": 1509,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "7300:1:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "expression": {
                                    "id": 1507,
                                    "name": "ids",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1383,
                                    "src": "7277:3:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                      "typeString": "uint256[] memory"
                                    }
                                  },
                                  "id": 1508,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "7281:18:4",
                                  "memberName": "unsafeMemoryAccess",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 4537,
                                  "src": "7277:22:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$returns$_t_uint256_$attached_to$_t_array$_t_uint256_$dyn_memory_ptr_$",
                                    "typeString": "function (uint256[] memory,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 1510,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7277:25:4",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "7264:38:4"
                            },
                            {
                              "assignments": [
                                1513
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 1513,
                                  "mutability": "mutable",
                                  "name": "value",
                                  "nameLocation": "7324:5:4",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 1527,
                                  "src": "7316:13:4",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 1512,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "7316:7:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 1518,
                              "initialValue": {
                                "arguments": [
                                  {
                                    "hexValue": "30",
                                    "id": 1516,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "7358:1:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "expression": {
                                    "id": 1514,
                                    "name": "values",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1386,
                                    "src": "7332:6:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                      "typeString": "uint256[] memory"
                                    }
                                  },
                                  "id": 1515,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "7339:18:4",
                                  "memberName": "unsafeMemoryAccess",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 4537,
                                  "src": "7332:25:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$returns$_t_uint256_$attached_to$_t_array$_t_uint256_$dyn_memory_ptr_$",
                                    "typeString": "function (uint256[] memory,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 1517,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7332:28:4",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "7316:44:4"
                            },
                            {
                              "eventCall": {
                                "arguments": [
                                  {
                                    "id": 1520,
                                    "name": "operator",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1410,
                                    "src": "7394:8:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "id": 1521,
                                    "name": "from",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1378,
                                    "src": "7404:4:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "id": 1522,
                                    "name": "to",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1380,
                                    "src": "7410:2:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "id": 1523,
                                    "name": "id",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1506,
                                    "src": "7414:2:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "id": 1524,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1513,
                                    "src": "7418:5:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 1519,
                                  "name": "TransferSingle",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3066,
                                  "src": "7379:14:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                                    "typeString": "function (address,address,address,uint256,uint256)"
                                  }
                                },
                                "id": 1525,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7379:45:4",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 1526,
                              "nodeType": "EmitStatement",
                              "src": "7374:50:4"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1376,
                    "nodeType": "StructuredDocumentation",
                    "src": "5484:690:4",
                    "text": " @dev Transfers a `value` amount of tokens of type `id` from `from` to `to`. Will mint (or burn) if `from`\n (or `to`) is the zero address.\n Emits a {TransferSingle} event if the arrays contain one element, and {TransferBatch} otherwise.\n Requirements:\n - If `to` refers to a smart contract, it must implement either {IERC1155Receiver-onERC1155Received}\n   or {IERC1155Receiver-onERC1155BatchReceived} and return the acceptance magic value.\n - `ids` and `values` must have the same length.\n NOTE: The ERC-1155 acceptance check is not performed in this function. See {_updateWithAcceptanceCheck} instead."
                  },
                  "id": 1539,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_update",
                  "nameLocation": "6188:7:4",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1387,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1378,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "6204:4:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1539,
                        "src": "6196:12:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1377,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "6196:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1380,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "6218:2:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1539,
                        "src": "6210:10:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1379,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "6210:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1383,
                        "mutability": "mutable",
                        "name": "ids",
                        "nameLocation": "6239:3:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1539,
                        "src": "6222:20:4",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 1381,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "6222:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1382,
                          "nodeType": "ArrayTypeName",
                          "src": "6222:9:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                            "typeString": "uint256[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1386,
                        "mutability": "mutable",
                        "name": "values",
                        "nameLocation": "6261:6:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1539,
                        "src": "6244:23:4",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 1384,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "6244:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1385,
                          "nodeType": "ArrayTypeName",
                          "src": "6244:9:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                            "typeString": "uint256[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6195:73:4"
                  },
                  "returnParameters": {
                    "id": 1388,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "6286:0:4"
                  },
                  "scope": 2006,
                  "src": "6179:1344:4",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1618,
                    "nodeType": "Block",
                    "src": "8293:509:4",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1556,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1542,
                              "src": "8311:4:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1557,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1544,
                              "src": "8317:2:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1558,
                              "name": "ids",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1547,
                              "src": "8321:3:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            },
                            {
                              "id": 1559,
                              "name": "values",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1550,
                              "src": "8326:6:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              },
                              {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            ],
                            "id": 1555,
                            "name": "_update",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1539,
                            "src": "8303:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$",
                              "typeString": "function (address,address,uint256[] memory,uint256[] memory)"
                            }
                          },
                          "id": 1560,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8303:30:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1561,
                        "nodeType": "ExpressionStatement",
                        "src": "8303:30:4"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 1567,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 1562,
                            "name": "to",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1544,
                            "src": "8347:2:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 1565,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "8361:1:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 1564,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "8353:7:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 1563,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "8353:7:4",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 1566,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8353:10:4",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "8347:16:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1617,
                        "nodeType": "IfStatement",
                        "src": "8343:453:4",
                        "trueBody": {
                          "id": 1616,
                          "nodeType": "Block",
                          "src": "8365:431:4",
                          "statements": [
                            {
                              "assignments": [
                                1569
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 1569,
                                  "mutability": "mutable",
                                  "name": "operator",
                                  "nameLocation": "8387:8:4",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 1616,
                                  "src": "8379:16:4",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  "typeName": {
                                    "id": 1568,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "8379:7:4",
                                    "stateMutability": "nonpayable",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 1572,
                              "initialValue": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 1570,
                                  "name": "_msgSender",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2273,
                                  "src": "8398:10:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                    "typeString": "function () view returns (address)"
                                  }
                                },
                                "id": 1571,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "8398:12:4",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "8379:31:4"
                            },
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1576,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "expression": {
                                    "id": 1573,
                                    "name": "ids",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1547,
                                    "src": "8428:3:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                      "typeString": "uint256[] memory"
                                    }
                                  },
                                  "id": 1574,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "8432:6:4",
                                  "memberName": "length",
                                  "nodeType": "MemberAccess",
                                  "src": "8428:10:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "hexValue": "31",
                                  "id": 1575,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "8442:1:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "8428:15:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": {
                                "id": 1614,
                                "nodeType": "Block",
                                "src": "8674:112:4",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "id": 1606,
                                          "name": "operator",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1569,
                                          "src": "8733:8:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        },
                                        {
                                          "id": 1607,
                                          "name": "from",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1542,
                                          "src": "8743:4:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        },
                                        {
                                          "id": 1608,
                                          "name": "to",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1544,
                                          "src": "8749:2:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        },
                                        {
                                          "id": 1609,
                                          "name": "ids",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1547,
                                          "src": "8753:3:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                            "typeString": "uint256[] memory"
                                          }
                                        },
                                        {
                                          "id": 1610,
                                          "name": "values",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1550,
                                          "src": "8758:6:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                            "typeString": "uint256[] memory"
                                          }
                                        },
                                        {
                                          "id": 1611,
                                          "name": "data",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1552,
                                          "src": "8766:4:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          },
                                          {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          },
                                          {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          },
                                          {
                                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                            "typeString": "uint256[] memory"
                                          },
                                          {
                                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                            "typeString": "uint256[] memory"
                                          },
                                          {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                          }
                                        ],
                                        "expression": {
                                          "id": 1603,
                                          "name": "ERC1155Utils",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 3381,
                                          "src": "8692:12:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_contract$_ERC1155Utils_$3381_$",
                                            "typeString": "type(library ERC1155Utils)"
                                          }
                                        },
                                        "id": 1605,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberLocation": "8705:27:4",
                                        "memberName": "checkOnERC1155BatchReceived",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 3380,
                                        "src": "8692:40:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$returns$__$",
                                          "typeString": "function (address,address,address,uint256[] memory,uint256[] memory,bytes memory)"
                                        }
                                      },
                                      "id": 1612,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "nameLocations": [],
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "8692:79:4",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_tuple$__$",
                                        "typeString": "tuple()"
                                      }
                                    },
                                    "id": 1613,
                                    "nodeType": "ExpressionStatement",
                                    "src": "8692:79:4"
                                  }
                                ]
                              },
                              "id": 1615,
                              "nodeType": "IfStatement",
                              "src": "8424:362:4",
                              "trueBody": {
                                "id": 1602,
                                "nodeType": "Block",
                                "src": "8445:223:4",
                                "statements": [
                                  {
                                    "assignments": [
                                      1578
                                    ],
                                    "declarations": [
                                      {
                                        "constant": false,
                                        "id": 1578,
                                        "mutability": "mutable",
                                        "name": "id",
                                        "nameLocation": "8471:2:4",
                                        "nodeType": "VariableDeclaration",
                                        "scope": 1602,
                                        "src": "8463:10:4",
                                        "stateVariable": false,
                                        "storageLocation": "default",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "typeName": {
                                          "id": 1577,
                                          "name": "uint256",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "8463:7:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "visibility": "internal"
                                      }
                                    ],
                                    "id": 1583,
                                    "initialValue": {
                                      "arguments": [
                                        {
                                          "hexValue": "30",
                                          "id": 1581,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "8499:1:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_0_by_1",
                                            "typeString": "int_const 0"
                                          },
                                          "value": "0"
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_rational_0_by_1",
                                            "typeString": "int_const 0"
                                          }
                                        ],
                                        "expression": {
                                          "id": 1579,
                                          "name": "ids",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1547,
                                          "src": "8476:3:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                            "typeString": "uint256[] memory"
                                          }
                                        },
                                        "id": 1580,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberLocation": "8480:18:4",
                                        "memberName": "unsafeMemoryAccess",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 4537,
                                        "src": "8476:22:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$returns$_t_uint256_$attached_to$_t_array$_t_uint256_$dyn_memory_ptr_$",
                                          "typeString": "function (uint256[] memory,uint256) pure returns (uint256)"
                                        }
                                      },
                                      "id": 1582,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "nameLocations": [],
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "8476:25:4",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "8463:38:4"
                                  },
                                  {
                                    "assignments": [
                                      1585
                                    ],
                                    "declarations": [
                                      {
                                        "constant": false,
                                        "id": 1585,
                                        "mutability": "mutable",
                                        "name": "value",
                                        "nameLocation": "8527:5:4",
                                        "nodeType": "VariableDeclaration",
                                        "scope": 1602,
                                        "src": "8519:13:4",
                                        "stateVariable": false,
                                        "storageLocation": "default",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "typeName": {
                                          "id": 1584,
                                          "name": "uint256",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "8519:7:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "visibility": "internal"
                                      }
                                    ],
                                    "id": 1590,
                                    "initialValue": {
                                      "arguments": [
                                        {
                                          "hexValue": "30",
                                          "id": 1588,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "8561:1:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_0_by_1",
                                            "typeString": "int_const 0"
                                          },
                                          "value": "0"
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_rational_0_by_1",
                                            "typeString": "int_const 0"
                                          }
                                        ],
                                        "expression": {
                                          "id": 1586,
                                          "name": "values",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1550,
                                          "src": "8535:6:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                            "typeString": "uint256[] memory"
                                          }
                                        },
                                        "id": 1587,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberLocation": "8542:18:4",
                                        "memberName": "unsafeMemoryAccess",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 4537,
                                        "src": "8535:25:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$returns$_t_uint256_$attached_to$_t_array$_t_uint256_$dyn_memory_ptr_$",
                                          "typeString": "function (uint256[] memory,uint256) pure returns (uint256)"
                                        }
                                      },
                                      "id": 1589,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "nameLocations": [],
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "8535:28:4",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "8519:44:4"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "id": 1594,
                                          "name": "operator",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1569,
                                          "src": "8617:8:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        },
                                        {
                                          "id": 1595,
                                          "name": "from",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1542,
                                          "src": "8627:4:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        },
                                        {
                                          "id": 1596,
                                          "name": "to",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1544,
                                          "src": "8633:2:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        },
                                        {
                                          "id": 1597,
                                          "name": "id",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1578,
                                          "src": "8637:2:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        {
                                          "id": 1598,
                                          "name": "value",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1585,
                                          "src": "8641:5:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        {
                                          "id": 1599,
                                          "name": "data",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1552,
                                          "src": "8648:4:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          },
                                          {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          },
                                          {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          },
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                          }
                                        ],
                                        "expression": {
                                          "id": 1591,
                                          "name": "ERC1155Utils",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 3381,
                                          "src": "8581:12:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_contract$_ERC1155Utils_$3381_$",
                                            "typeString": "type(library ERC1155Utils)"
                                          }
                                        },
                                        "id": 1593,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberLocation": "8594:22:4",
                                        "memberName": "checkOnERC1155Received",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 3306,
                                        "src": "8581:35:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$",
                                          "typeString": "function (address,address,address,uint256,uint256,bytes memory)"
                                        }
                                      },
                                      "id": 1600,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "nameLocations": [],
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "8581:72:4",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_tuple$__$",
                                        "typeString": "tuple()"
                                      }
                                    },
                                    "id": 1601,
                                    "nodeType": "ExpressionStatement",
                                    "src": "8581:72:4"
                                  }
                                ]
                              }
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1540,
                    "nodeType": "StructuredDocumentation",
                    "src": "7529:568:4",
                    "text": " @dev Version of {_update} that performs the token acceptance check by calling\n {IERC1155Receiver-onERC1155Received} or {IERC1155Receiver-onERC1155BatchReceived} on the receiver address if it\n contains code (eg. is a smart contract at the moment of execution).\n IMPORTANT: Overriding this function is discouraged because it poses a reentrancy risk from the receiver. So any\n update to the contract state after this function would break the check-effect-interaction pattern. Consider\n overriding {_update} instead."
                  },
                  "id": 1619,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_updateWithAcceptanceCheck",
                  "nameLocation": "8111:26:4",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1553,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1542,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "8155:4:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1619,
                        "src": "8147:12:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1541,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "8147:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1544,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "8177:2:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1619,
                        "src": "8169:10:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1543,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "8169:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1547,
                        "mutability": "mutable",
                        "name": "ids",
                        "nameLocation": "8206:3:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1619,
                        "src": "8189:20:4",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 1545,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "8189:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1546,
                          "nodeType": "ArrayTypeName",
                          "src": "8189:9:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                            "typeString": "uint256[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1550,
                        "mutability": "mutable",
                        "name": "values",
                        "nameLocation": "8236:6:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1619,
                        "src": "8219:23:4",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 1548,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "8219:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1549,
                          "nodeType": "ArrayTypeName",
                          "src": "8219:9:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                            "typeString": "uint256[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1552,
                        "mutability": "mutable",
                        "name": "data",
                        "nameLocation": "8265:4:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1619,
                        "src": "8252:17:4",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 1551,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "8252:5:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8137:138:4"
                  },
                  "returnParameters": {
                    "id": 1554,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "8293:0:4"
                  },
                  "scope": 2006,
                  "src": "8102:700:4",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1684,
                    "nodeType": "Block",
                    "src": "9367:355:4",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 1638,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 1633,
                            "name": "to",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1624,
                            "src": "9381:2:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 1636,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "9395:1:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 1635,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "9387:7:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 1634,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "9387:7:4",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 1637,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "9387:10:4",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "9381:16:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1647,
                        "nodeType": "IfStatement",
                        "src": "9377:88:4",
                        "trueBody": {
                          "id": 1646,
                          "nodeType": "Block",
                          "src": "9399:66:4",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "hexValue": "30",
                                        "id": 1642,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "9451:1:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        }
                                      ],
                                      "id": 1641,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "9443:7:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_address_$",
                                        "typeString": "type(address)"
                                      },
                                      "typeName": {
                                        "id": 1640,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "9443:7:4",
                                        "typeDescriptions": {}
                                      }
                                    },
                                    "id": 1643,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "9443:10:4",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 1639,
                                  "name": "ERC1155InvalidReceiver",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2717,
                                  "src": "9420:22:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$",
                                    "typeString": "function (address) pure returns (error)"
                                  }
                                },
                                "id": 1644,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "9420:34:4",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 1645,
                              "nodeType": "RevertStatement",
                              "src": "9413:41:4"
                            }
                          ]
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 1653,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 1648,
                            "name": "from",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1622,
                            "src": "9478:4:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 1651,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "9494:1:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 1650,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "9486:7:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 1649,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "9486:7:4",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 1652,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "9486:10:4",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "9478:18:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1662,
                        "nodeType": "IfStatement",
                        "src": "9474:88:4",
                        "trueBody": {
                          "id": 1661,
                          "nodeType": "Block",
                          "src": "9498:64:4",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "hexValue": "30",
                                        "id": 1657,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "9548:1:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        }
                                      ],
                                      "id": 1656,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "9540:7:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_address_$",
                                        "typeString": "type(address)"
                                      },
                                      "typeName": {
                                        "id": 1655,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "9540:7:4",
                                        "typeDescriptions": {}
                                      }
                                    },
                                    "id": 1658,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "9540:10:4",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 1654,
                                  "name": "ERC1155InvalidSender",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2712,
                                  "src": "9519:20:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$",
                                    "typeString": "function (address) pure returns (error)"
                                  }
                                },
                                "id": 1659,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "9519:32:4",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 1660,
                              "nodeType": "RevertStatement",
                              "src": "9512:39:4"
                            }
                          ]
                        }
                      },
                      {
                        "assignments": [
                          1667,
                          1670
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1667,
                            "mutability": "mutable",
                            "name": "ids",
                            "nameLocation": "9589:3:4",
                            "nodeType": "VariableDeclaration",
                            "scope": 1684,
                            "src": "9572:20:4",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                              "typeString": "uint256[]"
                            },
                            "typeName": {
                              "baseType": {
                                "id": 1665,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "9572:7:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1666,
                              "nodeType": "ArrayTypeName",
                              "src": "9572:9:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                                "typeString": "uint256[]"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 1670,
                            "mutability": "mutable",
                            "name": "values",
                            "nameLocation": "9611:6:4",
                            "nodeType": "VariableDeclaration",
                            "scope": 1684,
                            "src": "9594:23:4",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                              "typeString": "uint256[]"
                            },
                            "typeName": {
                              "baseType": {
                                "id": 1668,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "9594:7:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1669,
                              "nodeType": "ArrayTypeName",
                              "src": "9594:9:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                                "typeString": "uint256[]"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1675,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 1672,
                              "name": "id",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1626,
                              "src": "9640:2:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 1673,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1628,
                              "src": "9644:5:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1671,
                            "name": "_asSingletonArrays",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2005,
                            "src": "9621:18:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256[] memory,uint256[] memory)"
                            }
                          },
                          "id": 1674,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9621:29:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                            "typeString": "tuple(uint256[] memory,uint256[] memory)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "9571:79:4"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1677,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1622,
                              "src": "9687:4:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1678,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1624,
                              "src": "9693:2:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1679,
                              "name": "ids",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1667,
                              "src": "9697:3:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            },
                            {
                              "id": 1680,
                              "name": "values",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1670,
                              "src": "9702:6:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            },
                            {
                              "id": 1681,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1630,
                              "src": "9710:4:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              },
                              {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 1676,
                            "name": "_updateWithAcceptanceCheck",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1619,
                            "src": "9660:26:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$returns$__$",
                              "typeString": "function (address,address,uint256[] memory,uint256[] memory,bytes memory)"
                            }
                          },
                          "id": 1682,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9660:55:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1683,
                        "nodeType": "ExpressionStatement",
                        "src": "9660:55:4"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1620,
                    "nodeType": "StructuredDocumentation",
                    "src": "8808:446:4",
                    "text": " @dev Transfers a `value` tokens of token type `id` from `from` to `to`.\n Emits a {TransferSingle} event.\n Requirements:\n - `to` cannot be the zero address.\n - `from` must have a balance of tokens of type `id` of at least `value` amount.\n - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\n acceptance magic value."
                  },
                  "id": 1685,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_safeTransferFrom",
                  "nameLocation": "9268:17:4",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1631,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1622,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "9294:4:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1685,
                        "src": "9286:12:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1621,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "9286:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1624,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "9308:2:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1685,
                        "src": "9300:10:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1623,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "9300:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1626,
                        "mutability": "mutable",
                        "name": "id",
                        "nameLocation": "9320:2:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1685,
                        "src": "9312:10:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1625,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9312:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1628,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "9332:5:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1685,
                        "src": "9324:13:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1627,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9324:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1630,
                        "mutability": "mutable",
                        "name": "data",
                        "nameLocation": "9352:4:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1685,
                        "src": "9339:17:4",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 1629,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "9339:5:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "9285:72:4"
                  },
                  "returnParameters": {
                    "id": 1632,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "9367:0:4"
                  },
                  "scope": 2006,
                  "src": "9259:463:4",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1739,
                    "nodeType": "Block",
                    "src": "10302:266:4",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 1706,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 1701,
                            "name": "to",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1690,
                            "src": "10316:2:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 1704,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "10330:1:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 1703,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "10322:7:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 1702,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "10322:7:4",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 1705,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "10322:10:4",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "10316:16:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1715,
                        "nodeType": "IfStatement",
                        "src": "10312:88:4",
                        "trueBody": {
                          "id": 1714,
                          "nodeType": "Block",
                          "src": "10334:66:4",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "hexValue": "30",
                                        "id": 1710,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "10386:1:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        }
                                      ],
                                      "id": 1709,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "10378:7:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_address_$",
                                        "typeString": "type(address)"
                                      },
                                      "typeName": {
                                        "id": 1708,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "10378:7:4",
                                        "typeDescriptions": {}
                                      }
                                    },
                                    "id": 1711,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "10378:10:4",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 1707,
                                  "name": "ERC1155InvalidReceiver",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2717,
                                  "src": "10355:22:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$",
                                    "typeString": "function (address) pure returns (error)"
                                  }
                                },
                                "id": 1712,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "10355:34:4",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 1713,
                              "nodeType": "RevertStatement",
                              "src": "10348:41:4"
                            }
                          ]
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 1721,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 1716,
                            "name": "from",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1688,
                            "src": "10413:4:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 1719,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "10429:1:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 1718,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "10421:7:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 1717,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "10421:7:4",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 1720,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "10421:10:4",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "10413:18:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1730,
                        "nodeType": "IfStatement",
                        "src": "10409:88:4",
                        "trueBody": {
                          "id": 1729,
                          "nodeType": "Block",
                          "src": "10433:64:4",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "hexValue": "30",
                                        "id": 1725,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "10483:1:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        }
                                      ],
                                      "id": 1724,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "10475:7:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_address_$",
                                        "typeString": "type(address)"
                                      },
                                      "typeName": {
                                        "id": 1723,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "10475:7:4",
                                        "typeDescriptions": {}
                                      }
                                    },
                                    "id": 1726,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "10475:10:4",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 1722,
                                  "name": "ERC1155InvalidSender",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2712,
                                  "src": "10454:20:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$",
                                    "typeString": "function (address) pure returns (error)"
                                  }
                                },
                                "id": 1727,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "10454:32:4",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 1728,
                              "nodeType": "RevertStatement",
                              "src": "10447:39:4"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1732,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1688,
                              "src": "10533:4:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1733,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1690,
                              "src": "10539:2:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1734,
                              "name": "ids",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1693,
                              "src": "10543:3:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            },
                            {
                              "id": 1735,
                              "name": "values",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1696,
                              "src": "10548:6:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            },
                            {
                              "id": 1736,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1698,
                              "src": "10556:4:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              },
                              {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 1731,
                            "name": "_updateWithAcceptanceCheck",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1619,
                            "src": "10506:26:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$returns$__$",
                              "typeString": "function (address,address,uint256[] memory,uint256[] memory,bytes memory)"
                            }
                          },
                          "id": 1737,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10506:55:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1738,
                        "nodeType": "ExpressionStatement",
                        "src": "10506:55:4"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1686,
                    "nodeType": "StructuredDocumentation",
                    "src": "9728:390:4",
                    "text": " @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}.\n Emits a {TransferBatch} event.\n Requirements:\n - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\n acceptance magic value.\n - `ids` and `values` must have the same length."
                  },
                  "id": 1740,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_safeBatchTransferFrom",
                  "nameLocation": "10132:22:4",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1699,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1688,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "10172:4:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1740,
                        "src": "10164:12:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1687,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "10164:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1690,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "10194:2:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1740,
                        "src": "10186:10:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1689,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "10186:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1693,
                        "mutability": "mutable",
                        "name": "ids",
                        "nameLocation": "10223:3:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1740,
                        "src": "10206:20:4",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 1691,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "10206:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1692,
                          "nodeType": "ArrayTypeName",
                          "src": "10206:9:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                            "typeString": "uint256[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1696,
                        "mutability": "mutable",
                        "name": "values",
                        "nameLocation": "10253:6:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1740,
                        "src": "10236:23:4",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 1694,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "10236:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1695,
                          "nodeType": "ArrayTypeName",
                          "src": "10236:9:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                            "typeString": "uint256[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1698,
                        "mutability": "mutable",
                        "name": "data",
                        "nameLocation": "10282:4:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1740,
                        "src": "10269:17:4",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 1697,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "10269:5:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "10154:138:4"
                  },
                  "returnParameters": {
                    "id": 1700,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "10302:0:4"
                  },
                  "scope": 2006,
                  "src": "10123:445:4",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1758,
                    "nodeType": "Block",
                    "src": "11446:89:4",
                    "statements": [
                      {
                        "assignments": [
                          1748
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1748,
                            "mutability": "mutable",
                            "name": "$",
                            "nameLocation": "11479:1:4",
                            "nodeType": "VariableDeclaration",
                            "scope": 1758,
                            "src": "11456:24:4",
                            "stateVariable": false,
                            "storageLocation": "storage",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ERC1155Storage_$1066_storage_ptr",
                              "typeString": "struct ERC1155Upgradeable.ERC1155Storage"
                            },
                            "typeName": {
                              "id": 1747,
                              "nodeType": "UserDefinedTypeName",
                              "pathNode": {
                                "id": 1746,
                                "name": "ERC1155Storage",
                                "nameLocations": [
                                  "11456:14:4"
                                ],
                                "nodeType": "IdentifierPath",
                                "referencedDeclaration": 1066,
                                "src": "11456:14:4"
                              },
                              "referencedDeclaration": 1066,
                              "src": "11456:14:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_ERC1155Storage_$1066_storage_ptr",
                                "typeString": "struct ERC1155Upgradeable.ERC1155Storage"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1751,
                        "initialValue": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 1749,
                            "name": "_getERC1155Storage",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1077,
                            "src": "11483:18:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_ERC1155Storage_$1066_storage_ptr_$",
                              "typeString": "function () pure returns (struct ERC1155Upgradeable.ERC1155Storage storage pointer)"
                            }
                          },
                          "id": 1750,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11483:20:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ERC1155Storage_$1066_storage_ptr",
                            "typeString": "struct ERC1155Upgradeable.ERC1155Storage storage pointer"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "11456:47:4"
                      },
                      {
                        "expression": {
                          "id": 1756,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 1752,
                              "name": "$",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1748,
                              "src": "11513:1:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_ERC1155Storage_$1066_storage_ptr",
                                "typeString": "struct ERC1155Upgradeable.ERC1155Storage storage pointer"
                              }
                            },
                            "id": 1754,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberLocation": "11515:4:4",
                            "memberName": "_uri",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1065,
                            "src": "11513:6:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_storage",
                              "typeString": "string storage ref"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 1755,
                            "name": "newuri",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1743,
                            "src": "11522:6:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "src": "11513:15:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        "id": 1757,
                        "nodeType": "ExpressionStatement",
                        "src": "11513:15:4"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1741,
                    "nodeType": "StructuredDocumentation",
                    "src": "10574:811:4",
                    "text": " @dev Sets a new URI for all token types, by relying on the token type ID\n substitution mechanism\n https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the ERC].\n By this mechanism, any occurrence of the `\\{id\\}` substring in either the\n URI or any of the values in the JSON file at said URI will be replaced by\n clients with the token type ID.\n For example, the `https://token-cdn-domain/\\{id\\}.json` URI would be\n interpreted by clients as\n `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`\n for token type ID 0x4cce0.\n See {uri}.\n Because these URIs cannot be meaningfully represented by the {URI} event,\n this function emits no events."
                  },
                  "id": 1759,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_setURI",
                  "nameLocation": "11399:7:4",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1744,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1743,
                        "mutability": "mutable",
                        "name": "newuri",
                        "nameLocation": "11421:6:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1759,
                        "src": "11407:20:4",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 1742,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "11407:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "11406:22:4"
                  },
                  "returnParameters": {
                    "id": 1745,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "11446:0:4"
                  },
                  "scope": 2006,
                  "src": "11390:145:4",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1810,
                    "nodeType": "Block",
                    "src": "11995:264:4",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 1776,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 1771,
                            "name": "to",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1762,
                            "src": "12009:2:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 1774,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "12023:1:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 1773,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "12015:7:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 1772,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "12015:7:4",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 1775,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "12015:10:4",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "12009:16:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1785,
                        "nodeType": "IfStatement",
                        "src": "12005:88:4",
                        "trueBody": {
                          "id": 1784,
                          "nodeType": "Block",
                          "src": "12027:66:4",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "hexValue": "30",
                                        "id": 1780,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "12079:1:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        }
                                      ],
                                      "id": 1779,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "12071:7:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_address_$",
                                        "typeString": "type(address)"
                                      },
                                      "typeName": {
                                        "id": 1778,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "12071:7:4",
                                        "typeDescriptions": {}
                                      }
                                    },
                                    "id": 1781,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "12071:10:4",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 1777,
                                  "name": "ERC1155InvalidReceiver",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2717,
                                  "src": "12048:22:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$",
                                    "typeString": "function (address) pure returns (error)"
                                  }
                                },
                                "id": 1782,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "12048:34:4",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 1783,
                              "nodeType": "RevertStatement",
                              "src": "12041:41:4"
                            }
                          ]
                        }
                      },
                      {
                        "assignments": [
                          1790,
                          1793
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1790,
                            "mutability": "mutable",
                            "name": "ids",
                            "nameLocation": "12120:3:4",
                            "nodeType": "VariableDeclaration",
                            "scope": 1810,
                            "src": "12103:20:4",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                              "typeString": "uint256[]"
                            },
                            "typeName": {
                              "baseType": {
                                "id": 1788,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "12103:7:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1789,
                              "nodeType": "ArrayTypeName",
                              "src": "12103:9:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                                "typeString": "uint256[]"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 1793,
                            "mutability": "mutable",
                            "name": "values",
                            "nameLocation": "12142:6:4",
                            "nodeType": "VariableDeclaration",
                            "scope": 1810,
                            "src": "12125:23:4",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                              "typeString": "uint256[]"
                            },
                            "typeName": {
                              "baseType": {
                                "id": 1791,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "12125:7:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1792,
                              "nodeType": "ArrayTypeName",
                              "src": "12125:9:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                                "typeString": "uint256[]"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1798,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 1795,
                              "name": "id",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1764,
                              "src": "12171:2:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 1796,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1766,
                              "src": "12175:5:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1794,
                            "name": "_asSingletonArrays",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2005,
                            "src": "12152:18:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256[] memory,uint256[] memory)"
                            }
                          },
                          "id": 1797,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12152:29:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                            "typeString": "tuple(uint256[] memory,uint256[] memory)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "12102:79:4"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 1802,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "12226:1:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 1801,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "12218:7:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 1800,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "12218:7:4",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 1803,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "12218:10:4",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1804,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1762,
                              "src": "12230:2:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1805,
                              "name": "ids",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1790,
                              "src": "12234:3:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            },
                            {
                              "id": 1806,
                              "name": "values",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1793,
                              "src": "12239:6:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            },
                            {
                              "id": 1807,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1768,
                              "src": "12247:4:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              },
                              {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 1799,
                            "name": "_updateWithAcceptanceCheck",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1619,
                            "src": "12191:26:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$returns$__$",
                              "typeString": "function (address,address,uint256[] memory,uint256[] memory,bytes memory)"
                            }
                          },
                          "id": 1808,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12191:61:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1809,
                        "nodeType": "ExpressionStatement",
                        "src": "12191:61:4"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1760,
                    "nodeType": "StructuredDocumentation",
                    "src": "11541:367:4",
                    "text": " @dev Creates a `value` amount of tokens of type `id`, and assigns them to `to`.\n Emits a {TransferSingle} event.\n Requirements:\n - `to` cannot be the zero address.\n - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\n acceptance magic value."
                  },
                  "id": 1811,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_mint",
                  "nameLocation": "11922:5:4",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1769,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1762,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "11936:2:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1811,
                        "src": "11928:10:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1761,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "11928:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1764,
                        "mutability": "mutable",
                        "name": "id",
                        "nameLocation": "11948:2:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1811,
                        "src": "11940:10:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1763,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11940:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1766,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "11960:5:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1811,
                        "src": "11952:13:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1765,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11952:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1768,
                        "mutability": "mutable",
                        "name": "data",
                        "nameLocation": "11980:4:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1811,
                        "src": "11967:17:4",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 1767,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "11967:5:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "11927:58:4"
                  },
                  "returnParameters": {
                    "id": 1770,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "11995:0:4"
                  },
                  "scope": 2006,
                  "src": "11913:346:4",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1851,
                    "nodeType": "Block",
                    "src": "12797:175:4",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 1830,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 1825,
                            "name": "to",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1814,
                            "src": "12811:2:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 1828,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "12825:1:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 1827,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "12817:7:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 1826,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "12817:7:4",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 1829,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "12817:10:4",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "12811:16:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1839,
                        "nodeType": "IfStatement",
                        "src": "12807:88:4",
                        "trueBody": {
                          "id": 1838,
                          "nodeType": "Block",
                          "src": "12829:66:4",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "hexValue": "30",
                                        "id": 1834,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "12881:1:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        }
                                      ],
                                      "id": 1833,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "12873:7:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_address_$",
                                        "typeString": "type(address)"
                                      },
                                      "typeName": {
                                        "id": 1832,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "12873:7:4",
                                        "typeDescriptions": {}
                                      }
                                    },
                                    "id": 1835,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "12873:10:4",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 1831,
                                  "name": "ERC1155InvalidReceiver",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2717,
                                  "src": "12850:22:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$",
                                    "typeString": "function (address) pure returns (error)"
                                  }
                                },
                                "id": 1836,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "12850:34:4",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 1837,
                              "nodeType": "RevertStatement",
                              "src": "12843:41:4"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 1843,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "12939:1:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 1842,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "12931:7:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 1841,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "12931:7:4",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 1844,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "12931:10:4",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1845,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1814,
                              "src": "12943:2:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1846,
                              "name": "ids",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1817,
                              "src": "12947:3:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            },
                            {
                              "id": 1847,
                              "name": "values",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1820,
                              "src": "12952:6:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            },
                            {
                              "id": 1848,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1822,
                              "src": "12960:4:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              },
                              {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 1840,
                            "name": "_updateWithAcceptanceCheck",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1619,
                            "src": "12904:26:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$returns$__$",
                              "typeString": "function (address,address,uint256[] memory,uint256[] memory,bytes memory)"
                            }
                          },
                          "id": 1849,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12904:61:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1850,
                        "nodeType": "ExpressionStatement",
                        "src": "12904:61:4"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1812,
                    "nodeType": "StructuredDocumentation",
                    "src": "12265:420:4",
                    "text": " @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.\n Emits a {TransferBatch} event.\n Requirements:\n - `ids` and `values` must have the same length.\n - `to` cannot be the zero address.\n - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\n acceptance magic value."
                  },
                  "id": 1852,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_mintBatch",
                  "nameLocation": "12699:10:4",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1823,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1814,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "12718:2:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1852,
                        "src": "12710:10:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1813,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "12710:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1817,
                        "mutability": "mutable",
                        "name": "ids",
                        "nameLocation": "12739:3:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1852,
                        "src": "12722:20:4",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 1815,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "12722:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1816,
                          "nodeType": "ArrayTypeName",
                          "src": "12722:9:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                            "typeString": "uint256[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1820,
                        "mutability": "mutable",
                        "name": "values",
                        "nameLocation": "12761:6:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1852,
                        "src": "12744:23:4",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 1818,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "12744:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1819,
                          "nodeType": "ArrayTypeName",
                          "src": "12744:9:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                            "typeString": "uint256[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1822,
                        "mutability": "mutable",
                        "name": "data",
                        "nameLocation": "12782:4:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1852,
                        "src": "12769:17:4",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 1821,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "12769:5:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "12709:78:4"
                  },
                  "returnParameters": {
                    "id": 1824,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "12797:0:4"
                  },
                  "scope": 2006,
                  "src": "12690:282:4",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1901,
                    "nodeType": "Block",
                    "src": "13331:264:4",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 1867,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 1862,
                            "name": "from",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1855,
                            "src": "13345:4:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 1865,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "13361:1:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 1864,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "13353:7:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 1863,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "13353:7:4",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 1866,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "13353:10:4",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "13345:18:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1876,
                        "nodeType": "IfStatement",
                        "src": "13341:88:4",
                        "trueBody": {
                          "id": 1875,
                          "nodeType": "Block",
                          "src": "13365:64:4",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "hexValue": "30",
                                        "id": 1871,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "13415:1:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        }
                                      ],
                                      "id": 1870,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "13407:7:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_address_$",
                                        "typeString": "type(address)"
                                      },
                                      "typeName": {
                                        "id": 1869,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "13407:7:4",
                                        "typeDescriptions": {}
                                      }
                                    },
                                    "id": 1872,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "13407:10:4",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 1868,
                                  "name": "ERC1155InvalidSender",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2712,
                                  "src": "13386:20:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$",
                                    "typeString": "function (address) pure returns (error)"
                                  }
                                },
                                "id": 1873,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "13386:32:4",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 1874,
                              "nodeType": "RevertStatement",
                              "src": "13379:39:4"
                            }
                          ]
                        }
                      },
                      {
                        "assignments": [
                          1881,
                          1884
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1881,
                            "mutability": "mutable",
                            "name": "ids",
                            "nameLocation": "13456:3:4",
                            "nodeType": "VariableDeclaration",
                            "scope": 1901,
                            "src": "13439:20:4",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                              "typeString": "uint256[]"
                            },
                            "typeName": {
                              "baseType": {
                                "id": 1879,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "13439:7:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1880,
                              "nodeType": "ArrayTypeName",
                              "src": "13439:9:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                                "typeString": "uint256[]"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 1884,
                            "mutability": "mutable",
                            "name": "values",
                            "nameLocation": "13478:6:4",
                            "nodeType": "VariableDeclaration",
                            "scope": 1901,
                            "src": "13461:23:4",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                              "typeString": "uint256[]"
                            },
                            "typeName": {
                              "baseType": {
                                "id": 1882,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "13461:7:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1883,
                              "nodeType": "ArrayTypeName",
                              "src": "13461:9:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                                "typeString": "uint256[]"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1889,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 1886,
                              "name": "id",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1857,
                              "src": "13507:2:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 1887,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1859,
                              "src": "13511:5:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 1885,
                            "name": "_asSingletonArrays",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2005,
                            "src": "13488:18:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256[] memory,uint256[] memory)"
                            }
                          },
                          "id": 1888,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13488:29:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$",
                            "typeString": "tuple(uint256[] memory,uint256[] memory)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "13438:79:4"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1891,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1855,
                              "src": "13554:4:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 1894,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "13568:1:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 1893,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "13560:7:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 1892,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "13560:7:4",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 1895,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "13560:10:4",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1896,
                              "name": "ids",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1881,
                              "src": "13572:3:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            },
                            {
                              "id": 1897,
                              "name": "values",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1884,
                              "src": "13577:6:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            },
                            {
                              "hexValue": "",
                              "id": 1898,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "13585:2:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                "typeString": "literal_string \"\""
                              },
                              "value": ""
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              },
                              {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                "typeString": "literal_string \"\""
                              }
                            ],
                            "id": 1890,
                            "name": "_updateWithAcceptanceCheck",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1619,
                            "src": "13527:26:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$returns$__$",
                              "typeString": "function (address,address,uint256[] memory,uint256[] memory,bytes memory)"
                            }
                          },
                          "id": 1899,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13527:61:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1900,
                        "nodeType": "ExpressionStatement",
                        "src": "13527:61:4"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1853,
                    "nodeType": "StructuredDocumentation",
                    "src": "12978:283:4",
                    "text": " @dev Destroys a `value` amount of tokens of type `id` from `from`\n Emits a {TransferSingle} event.\n Requirements:\n - `from` cannot be the zero address.\n - `from` must have at least `value` amount of tokens of type `id`."
                  },
                  "id": 1902,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_burn",
                  "nameLocation": "13275:5:4",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1860,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1855,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "13289:4:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1902,
                        "src": "13281:12:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1854,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "13281:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1857,
                        "mutability": "mutable",
                        "name": "id",
                        "nameLocation": "13303:2:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1902,
                        "src": "13295:10:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1856,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "13295:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1859,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "13315:5:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1902,
                        "src": "13307:13:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1858,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "13307:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "13280:41:4"
                  },
                  "returnParameters": {
                    "id": 1861,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "13331:0:4"
                  },
                  "scope": 2006,
                  "src": "13266:329:4",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1940,
                    "nodeType": "Block",
                    "src": "14041:175:4",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 1919,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 1914,
                            "name": "from",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1905,
                            "src": "14055:4:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 1917,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "14071:1:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 1916,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "14063:7:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 1915,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "14063:7:4",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 1918,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "14063:10:4",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "14055:18:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1928,
                        "nodeType": "IfStatement",
                        "src": "14051:88:4",
                        "trueBody": {
                          "id": 1927,
                          "nodeType": "Block",
                          "src": "14075:64:4",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "hexValue": "30",
                                        "id": 1923,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "14125:1:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        }
                                      ],
                                      "id": 1922,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "14117:7:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_address_$",
                                        "typeString": "type(address)"
                                      },
                                      "typeName": {
                                        "id": 1921,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "14117:7:4",
                                        "typeDescriptions": {}
                                      }
                                    },
                                    "id": 1924,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "14117:10:4",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 1920,
                                  "name": "ERC1155InvalidSender",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2712,
                                  "src": "14096:20:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$",
                                    "typeString": "function (address) pure returns (error)"
                                  }
                                },
                                "id": 1925,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "14096:32:4",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 1926,
                              "nodeType": "RevertStatement",
                              "src": "14089:39:4"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1930,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1905,
                              "src": "14175:4:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "hexValue": "30",
                                  "id": 1933,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "14189:1:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  }
                                ],
                                "id": 1932,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "14181:7:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 1931,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "14181:7:4",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 1934,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "14181:10:4",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1935,
                              "name": "ids",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1908,
                              "src": "14193:3:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            },
                            {
                              "id": 1936,
                              "name": "values",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1911,
                              "src": "14198:6:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            },
                            {
                              "hexValue": "",
                              "id": 1937,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "14206:2:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                "typeString": "literal_string \"\""
                              },
                              "value": ""
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              },
                              {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                "typeString": "literal_string \"\""
                              }
                            ],
                            "id": 1929,
                            "name": "_updateWithAcceptanceCheck",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1619,
                            "src": "14148:26:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$returns$__$",
                              "typeString": "function (address,address,uint256[] memory,uint256[] memory,bytes memory)"
                            }
                          },
                          "id": 1938,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14148:61:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1939,
                        "nodeType": "ExpressionStatement",
                        "src": "14148:61:4"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1903,
                    "nodeType": "StructuredDocumentation",
                    "src": "13601:345:4",
                    "text": " @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.\n Emits a {TransferBatch} event.\n Requirements:\n - `from` cannot be the zero address.\n - `from` must have at least `value` amount of tokens of type `id`.\n - `ids` and `values` must have the same length."
                  },
                  "id": 1941,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_burnBatch",
                  "nameLocation": "13960:10:4",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1912,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1905,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "13979:4:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1941,
                        "src": "13971:12:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1904,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "13971:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1908,
                        "mutability": "mutable",
                        "name": "ids",
                        "nameLocation": "14002:3:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1941,
                        "src": "13985:20:4",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 1906,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "13985:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1907,
                          "nodeType": "ArrayTypeName",
                          "src": "13985:9:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                            "typeString": "uint256[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1911,
                        "mutability": "mutable",
                        "name": "values",
                        "nameLocation": "14024:6:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1941,
                        "src": "14007:23:4",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 1909,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "14007:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1910,
                          "nodeType": "ArrayTypeName",
                          "src": "14007:9:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                            "typeString": "uint256[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "13970:61:4"
                  },
                  "returnParameters": {
                    "id": 1913,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "14041:0:4"
                  },
                  "scope": 2006,
                  "src": "13951:265:4",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 1988,
                    "nodeType": "Block",
                    "src": "14528:281:4",
                    "statements": [
                      {
                        "assignments": [
                          1953
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1953,
                            "mutability": "mutable",
                            "name": "$",
                            "nameLocation": "14561:1:4",
                            "nodeType": "VariableDeclaration",
                            "scope": 1988,
                            "src": "14538:24:4",
                            "stateVariable": false,
                            "storageLocation": "storage",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ERC1155Storage_$1066_storage_ptr",
                              "typeString": "struct ERC1155Upgradeable.ERC1155Storage"
                            },
                            "typeName": {
                              "id": 1952,
                              "nodeType": "UserDefinedTypeName",
                              "pathNode": {
                                "id": 1951,
                                "name": "ERC1155Storage",
                                "nameLocations": [
                                  "14538:14:4"
                                ],
                                "nodeType": "IdentifierPath",
                                "referencedDeclaration": 1066,
                                "src": "14538:14:4"
                              },
                              "referencedDeclaration": 1066,
                              "src": "14538:14:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_ERC1155Storage_$1066_storage_ptr",
                                "typeString": "struct ERC1155Upgradeable.ERC1155Storage"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1956,
                        "initialValue": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 1954,
                            "name": "_getERC1155Storage",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1077,
                            "src": "14565:18:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_ERC1155Storage_$1066_storage_ptr_$",
                              "typeString": "function () pure returns (struct ERC1155Upgradeable.ERC1155Storage storage pointer)"
                            }
                          },
                          "id": 1955,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14565:20:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ERC1155Storage_$1066_storage_ptr",
                            "typeString": "struct ERC1155Upgradeable.ERC1155Storage storage pointer"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "14538:47:4"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 1962,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 1957,
                            "name": "operator",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1946,
                            "src": "14599:8:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 1960,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "14619:1:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 1959,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "14611:7:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 1958,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "14611:7:4",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 1961,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "14611:10:4",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "14599:22:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1971,
                        "nodeType": "IfStatement",
                        "src": "14595:94:4",
                        "trueBody": {
                          "id": 1970,
                          "nodeType": "Block",
                          "src": "14623:66:4",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "hexValue": "30",
                                        "id": 1966,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "14675:1:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        }
                                      ],
                                      "id": 1965,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "14667:7:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_address_$",
                                        "typeString": "type(address)"
                                      },
                                      "typeName": {
                                        "id": 1964,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "14667:7:4",
                                        "typeDescriptions": {}
                                      }
                                    },
                                    "id": 1967,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "14667:10:4",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 1963,
                                  "name": "ERC1155InvalidOperator",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2734,
                                  "src": "14644:22:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$",
                                    "typeString": "function (address) pure returns (error)"
                                  }
                                },
                                "id": 1968,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "14644:34:4",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 1969,
                              "nodeType": "RevertStatement",
                              "src": "14637:41:4"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "id": 1980,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "baseExpression": {
                                "expression": {
                                  "id": 1972,
                                  "name": "$",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1953,
                                  "src": "14698:1:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_ERC1155Storage_$1066_storage_ptr",
                                    "typeString": "struct ERC1155Upgradeable.ERC1155Storage storage pointer"
                                  }
                                },
                                "id": 1976,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "14700:18:4",
                                "memberName": "_operatorApprovals",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 1063,
                                "src": "14698:20:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
                                  "typeString": "mapping(address => mapping(address => bool))"
                                }
                              },
                              "id": 1977,
                              "indexExpression": {
                                "id": 1974,
                                "name": "owner",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1944,
                                "src": "14719:5:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "14698:27:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                "typeString": "mapping(address => bool)"
                              }
                            },
                            "id": 1978,
                            "indexExpression": {
                              "id": 1975,
                              "name": "operator",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1946,
                              "src": "14726:8:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "14698:37:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 1979,
                            "name": "approved",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1948,
                            "src": "14738:8:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "14698:48:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1981,
                        "nodeType": "ExpressionStatement",
                        "src": "14698:48:4"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 1983,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1944,
                              "src": "14776:5:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1984,
                              "name": "operator",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1946,
                              "src": "14783:8:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1985,
                              "name": "approved",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1948,
                              "src": "14793:8:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 1982,
                            "name": "ApprovalForAll",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3090,
                            "src": "14761:14:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_bool_$returns$__$",
                              "typeString": "function (address,address,bool)"
                            }
                          },
                          "id": 1986,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14761:41:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1987,
                        "nodeType": "EmitStatement",
                        "src": "14756:46:4"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1942,
                    "nodeType": "StructuredDocumentation",
                    "src": "14222:208:4",
                    "text": " @dev Approve `operator` to operate on all of `owner` tokens\n Emits an {ApprovalForAll} event.\n Requirements:\n - `operator` cannot be the zero address."
                  },
                  "id": 1989,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_setApprovalForAll",
                  "nameLocation": "14444:18:4",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1949,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1944,
                        "mutability": "mutable",
                        "name": "owner",
                        "nameLocation": "14471:5:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1989,
                        "src": "14463:13:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1943,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "14463:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1946,
                        "mutability": "mutable",
                        "name": "operator",
                        "nameLocation": "14486:8:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1989,
                        "src": "14478:16:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 1945,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "14478:7:4",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1948,
                        "mutability": "mutable",
                        "name": "approved",
                        "nameLocation": "14501:8:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 1989,
                        "src": "14496:13:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 1947,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "14496:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "14462:48:4"
                  },
                  "returnParameters": {
                    "id": 1950,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "14528:0:4"
                  },
                  "scope": 2006,
                  "src": "14435:374:4",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2004,
                    "nodeType": "Block",
                    "src": "15083:664:4",
                    "statements": [
                      {
                        "AST": {
                          "nativeSrc": "15118:623:4",
                          "nodeType": "YulBlock",
                          "src": "15118:623:4",
                          "statements": [
                            {
                              "nativeSrc": "15176:21:4",
                              "nodeType": "YulAssignment",
                              "src": "15176:21:4",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nativeSrc": "15192:4:4",
                                    "nodeType": "YulLiteral",
                                    "src": "15192:4:4",
                                    "type": "",
                                    "value": "0x40"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nativeSrc": "15186:5:4",
                                  "nodeType": "YulIdentifier",
                                  "src": "15186:5:4"
                                },
                                "nativeSrc": "15186:11:4",
                                "nodeType": "YulFunctionCall",
                                "src": "15186:11:4"
                              },
                              "variableNames": [
                                {
                                  "name": "array1",
                                  "nativeSrc": "15176:6:4",
                                  "nodeType": "YulIdentifier",
                                  "src": "15176:6:4"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "array1",
                                    "nativeSrc": "15254:6:4",
                                    "nodeType": "YulIdentifier",
                                    "src": "15254:6:4"
                                  },
                                  {
                                    "kind": "number",
                                    "nativeSrc": "15262:1:4",
                                    "nodeType": "YulLiteral",
                                    "src": "15262:1:4",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nativeSrc": "15247:6:4",
                                  "nodeType": "YulIdentifier",
                                  "src": "15247:6:4"
                                },
                                "nativeSrc": "15247:17:4",
                                "nodeType": "YulFunctionCall",
                                "src": "15247:17:4"
                              },
                              "nativeSrc": "15247:17:4",
                              "nodeType": "YulExpressionStatement",
                              "src": "15247:17:4"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "array1",
                                        "nativeSrc": "15385:6:4",
                                        "nodeType": "YulIdentifier",
                                        "src": "15385:6:4"
                                      },
                                      {
                                        "kind": "number",
                                        "nativeSrc": "15393:4:4",
                                        "nodeType": "YulLiteral",
                                        "src": "15393:4:4",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nativeSrc": "15381:3:4",
                                      "nodeType": "YulIdentifier",
                                      "src": "15381:3:4"
                                    },
                                    "nativeSrc": "15381:17:4",
                                    "nodeType": "YulFunctionCall",
                                    "src": "15381:17:4"
                                  },
                                  {
                                    "name": "element1",
                                    "nativeSrc": "15400:8:4",
                                    "nodeType": "YulIdentifier",
                                    "src": "15400:8:4"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nativeSrc": "15374:6:4",
                                  "nodeType": "YulIdentifier",
                                  "src": "15374:6:4"
                                },
                                "nativeSrc": "15374:35:4",
                                "nodeType": "YulFunctionCall",
                                "src": "15374:35:4"
                              },
                              "nativeSrc": "15374:35:4",
                              "nodeType": "YulExpressionStatement",
                              "src": "15374:35:4"
                            },
                            {
                              "nativeSrc": "15500:27:4",
                              "nodeType": "YulAssignment",
                              "src": "15500:27:4",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "array1",
                                    "nativeSrc": "15514:6:4",
                                    "nodeType": "YulIdentifier",
                                    "src": "15514:6:4"
                                  },
                                  {
                                    "kind": "number",
                                    "nativeSrc": "15522:4:4",
                                    "nodeType": "YulLiteral",
                                    "src": "15522:4:4",
                                    "type": "",
                                    "value": "0x40"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nativeSrc": "15510:3:4",
                                  "nodeType": "YulIdentifier",
                                  "src": "15510:3:4"
                                },
                                "nativeSrc": "15510:17:4",
                                "nodeType": "YulFunctionCall",
                                "src": "15510:17:4"
                              },
                              "variableNames": [
                                {
                                  "name": "array2",
                                  "nativeSrc": "15500:6:4",
                                  "nodeType": "YulIdentifier",
                                  "src": "15500:6:4"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "array2",
                                    "nativeSrc": "15547:6:4",
                                    "nodeType": "YulIdentifier",
                                    "src": "15547:6:4"
                                  },
                                  {
                                    "kind": "number",
                                    "nativeSrc": "15555:1:4",
                                    "nodeType": "YulLiteral",
                                    "src": "15555:1:4",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nativeSrc": "15540:6:4",
                                  "nodeType": "YulIdentifier",
                                  "src": "15540:6:4"
                                },
                                "nativeSrc": "15540:17:4",
                                "nodeType": "YulFunctionCall",
                                "src": "15540:17:4"
                              },
                              "nativeSrc": "15540:17:4",
                              "nodeType": "YulExpressionStatement",
                              "src": "15540:17:4"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "array2",
                                        "nativeSrc": "15581:6:4",
                                        "nodeType": "YulIdentifier",
                                        "src": "15581:6:4"
                                      },
                                      {
                                        "kind": "number",
                                        "nativeSrc": "15589:4:4",
                                        "nodeType": "YulLiteral",
                                        "src": "15589:4:4",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nativeSrc": "15577:3:4",
                                      "nodeType": "YulIdentifier",
                                      "src": "15577:3:4"
                                    },
                                    "nativeSrc": "15577:17:4",
                                    "nodeType": "YulFunctionCall",
                                    "src": "15577:17:4"
                                  },
                                  {
                                    "name": "element2",
                                    "nativeSrc": "15596:8:4",
                                    "nodeType": "YulIdentifier",
                                    "src": "15596:8:4"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nativeSrc": "15570:6:4",
                                  "nodeType": "YulIdentifier",
                                  "src": "15570:6:4"
                                },
                                "nativeSrc": "15570:35:4",
                                "nodeType": "YulFunctionCall",
                                "src": "15570:35:4"
                              },
                              "nativeSrc": "15570:35:4",
                              "nodeType": "YulExpressionStatement",
                              "src": "15570:35:4"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nativeSrc": "15707:4:4",
                                    "nodeType": "YulLiteral",
                                    "src": "15707:4:4",
                                    "type": "",
                                    "value": "0x40"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "array2",
                                        "nativeSrc": "15717:6:4",
                                        "nodeType": "YulIdentifier",
                                        "src": "15717:6:4"
                                      },
                                      {
                                        "kind": "number",
                                        "nativeSrc": "15725:4:4",
                                        "nodeType": "YulLiteral",
                                        "src": "15725:4:4",
                                        "type": "",
                                        "value": "0x40"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nativeSrc": "15713:3:4",
                                      "nodeType": "YulIdentifier",
                                      "src": "15713:3:4"
                                    },
                                    "nativeSrc": "15713:17:4",
                                    "nodeType": "YulFunctionCall",
                                    "src": "15713:17:4"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nativeSrc": "15700:6:4",
                                  "nodeType": "YulIdentifier",
                                  "src": "15700:6:4"
                                },
                                "nativeSrc": "15700:31:4",
                                "nodeType": "YulFunctionCall",
                                "src": "15700:31:4"
                              },
                              "nativeSrc": "15700:31:4",
                              "nodeType": "YulExpressionStatement",
                              "src": "15700:31:4"
                            }
                          ]
                        },
                        "evmVersion": "paris",
                        "externalReferences": [
                          {
                            "declaration": 1998,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "15176:6:4",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1998,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "15254:6:4",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1998,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "15385:6:4",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1998,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "15514:6:4",
                            "valueSize": 1
                          },
                          {
                            "declaration": 2001,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "15500:6:4",
                            "valueSize": 1
                          },
                          {
                            "declaration": 2001,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "15547:6:4",
                            "valueSize": 1
                          },
                          {
                            "declaration": 2001,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "15581:6:4",
                            "valueSize": 1
                          },
                          {
                            "declaration": 2001,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "15717:6:4",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1992,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "15400:8:4",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1994,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "15596:8:4",
                            "valueSize": 1
                          }
                        ],
                        "flags": [
                          "memory-safe"
                        ],
                        "id": 2003,
                        "nodeType": "InlineAssembly",
                        "src": "15093:648:4"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 1990,
                    "nodeType": "StructuredDocumentation",
                    "src": "14815:105:4",
                    "text": " @dev Creates an array in memory with only one value for each of the elements provided."
                  },
                  "id": 2005,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_asSingletonArrays",
                  "nameLocation": "14934:18:4",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 1995,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1992,
                        "mutability": "mutable",
                        "name": "element1",
                        "nameLocation": "14970:8:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 2005,
                        "src": "14962:16:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1991,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "14962:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 1994,
                        "mutability": "mutable",
                        "name": "element2",
                        "nameLocation": "14996:8:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 2005,
                        "src": "14988:16:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1993,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "14988:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "14952:58:4"
                  },
                  "returnParameters": {
                    "id": 2002,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 1998,
                        "mutability": "mutable",
                        "name": "array1",
                        "nameLocation": "15050:6:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 2005,
                        "src": "15033:23:4",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 1996,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "15033:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1997,
                          "nodeType": "ArrayTypeName",
                          "src": "15033:9:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                            "typeString": "uint256[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2001,
                        "mutability": "mutable",
                        "name": "array2",
                        "nameLocation": "15075:6:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 2005,
                        "src": "15058:23:4",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 1999,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "15058:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 2000,
                          "nodeType": "ArrayTypeName",
                          "src": "15058:9:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                            "typeString": "uint256[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "15032:50:4"
                  },
                  "scope": 2006,
                  "src": "14925:822:4",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "private"
                }
              ],
              "scope": 2007,
              "src": "1052:14697:4",
              "usedErrors": [
                576,
                579,
                2707,
                2712,
                2717,
                2724,
                2729,
                2734,
                2741
              ],
              "usedEvents": [
                584,
                3066,
                3081,
                3090,
                3097
              ]
            }
          ],
          "src": "109:15641:4"
        },
        "id": 4
      },
      "@openzeppelin/contracts-upgradeable/token/ERC1155/extensions/ERC1155SupplyUpgradeable.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts-upgradeable/token/ERC1155/extensions/ERC1155SupplyUpgradeable.sol",
          "exportedSymbols": {
            "Arrays": [
              4619
            ],
            "ERC1155SupplyUpgradeable": [
              2245
            ],
            "ERC1155Upgradeable": [
              2006
            ],
            "Initializable": [
              827
            ]
          },
          "id": 2246,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 2008,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".20"
              ],
              "nodeType": "PragmaDirective",
              "src": "126:24:5"
            },
            {
              "absolutePath": "@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155Upgradeable.sol",
              "file": "../ERC1155Upgradeable.sol",
              "id": 2010,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 2246,
              "sourceUnit": 2007,
              "src": "152:61:5",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 2009,
                    "name": "ERC1155Upgradeable",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2006,
                    "src": "160:18:5",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/utils/Arrays.sol",
              "file": "@openzeppelin/contracts/utils/Arrays.sol",
              "id": 2012,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 2246,
              "sourceUnit": 4620,
              "src": "214:64:5",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 2011,
                    "name": "Arrays",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4619,
                    "src": "222:6:5",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol",
              "file": "../../../proxy/utils/Initializable.sol",
              "id": 2014,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 2246,
              "sourceUnit": 828,
              "src": "279:69:5",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 2013,
                    "name": "Initializable",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 827,
                    "src": "287:13:5",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "abstract": true,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 2016,
                    "name": "Initializable",
                    "nameLocations": [
                      "949:13:5"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 827,
                    "src": "949:13:5"
                  },
                  "id": 2017,
                  "nodeType": "InheritanceSpecifier",
                  "src": "949:13:5"
                },
                {
                  "baseName": {
                    "id": 2018,
                    "name": "ERC1155Upgradeable",
                    "nameLocations": [
                      "964:18:5"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 2006,
                    "src": "964:18:5"
                  },
                  "id": 2019,
                  "nodeType": "InheritanceSpecifier",
                  "src": "964:18:5"
                }
              ],
              "canonicalName": "ERC1155SupplyUpgradeable",
              "contractDependencies": [],
              "contractKind": "contract",
              "documentation": {
                "id": 2015,
                "nodeType": "StructuredDocumentation",
                "src": "350:552:5",
                "text": " @dev Extension of ERC-1155 that adds tracking of total supply per id.\n Useful for scenarios where Fungible and Non-fungible tokens have to be\n clearly identified. Note: While a totalSupply of 1 might mean the\n corresponding is an NFT, there is no guarantees that no other token with the\n same id are not going to be minted.\n NOTE: This contract implies a global limit of 2**256 - 1 to the number of tokens\n that can be minted.\n CAUTION: This extension should not be added in an upgrade to an already deployed contract."
              },
              "fullyImplemented": true,
              "id": 2245,
              "linearizedBaseContracts": [
                2245,
                2006,
                2742,
                3227,
                3169,
                2491,
                6393,
                2291,
                827
              ],
              "name": "ERC1155SupplyUpgradeable",
              "nameLocation": "921:24:5",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "global": false,
                  "id": 2023,
                  "libraryName": {
                    "id": 2020,
                    "name": "Arrays",
                    "nameLocations": [
                      "995:6:5"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 4619,
                    "src": "995:6:5"
                  },
                  "nodeType": "UsingForDirective",
                  "src": "989:27:5",
                  "typeName": {
                    "baseType": {
                      "id": 2021,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "1006:7:5",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 2022,
                    "nodeType": "ArrayTypeName",
                    "src": "1006:9:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  }
                },
                {
                  "canonicalName": "ERC1155SupplyUpgradeable.ERC1155SupplyStorage",
                  "documentation": {
                    "id": 2024,
                    "nodeType": "StructuredDocumentation",
                    "src": "1022:71:5",
                    "text": "@custom:storage-location erc7201:openzeppelin.storage.ERC1155Supply"
                  },
                  "id": 2031,
                  "members": [
                    {
                      "constant": false,
                      "id": 2028,
                      "mutability": "mutable",
                      "name": "_totalSupply",
                      "nameLocation": "1167:12:5",
                      "nodeType": "VariableDeclaration",
                      "scope": 2031,
                      "src": "1136:43:5",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                        "typeString": "mapping(uint256 => uint256)"
                      },
                      "typeName": {
                        "id": 2027,
                        "keyName": "id",
                        "keyNameLocation": "1152:2:5",
                        "keyType": {
                          "id": 2025,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1144:7:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Mapping",
                        "src": "1136:30:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                          "typeString": "mapping(uint256 => uint256)"
                        },
                        "valueName": "",
                        "valueNameLocation": "-1:-1:-1",
                        "valueType": {
                          "id": 2026,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1158:7:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 2030,
                      "mutability": "mutable",
                      "name": "_totalSupplyAll",
                      "nameLocation": "1197:15:5",
                      "nodeType": "VariableDeclaration",
                      "scope": 2031,
                      "src": "1189:23:5",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2029,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1189:7:5",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "name": "ERC1155SupplyStorage",
                  "nameLocation": "1105:20:5",
                  "nodeType": "StructDefinition",
                  "scope": 2245,
                  "src": "1098:121:5",
                  "visibility": "public"
                },
                {
                  "constant": true,
                  "id": 2034,
                  "mutability": "constant",
                  "name": "ERC1155SupplyStorageLocation",
                  "nameLocation": "1367:28:5",
                  "nodeType": "VariableDeclaration",
                  "scope": 2245,
                  "src": "1342:122:5",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 2032,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1342:7:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": {
                    "hexValue": "307834613539333636326565303464323762366130306562623331626537666530633130326332616465383261376335643736346632646630356463346532383030",
                    "id": 2033,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1398:66:5",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_33628775545370798169512062789505411687485904666574391101151478347969820764160_by_1",
                      "typeString": "int_const 3362...(69 digits omitted)...4160"
                    },
                    "value": "0x4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e2800"
                  },
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 2041,
                    "nodeType": "Block",
                    "src": "1561:87:5",
                    "statements": [
                      {
                        "AST": {
                          "nativeSrc": "1580:62:5",
                          "nodeType": "YulBlock",
                          "src": "1580:62:5",
                          "statements": [
                            {
                              "nativeSrc": "1594:38:5",
                              "nodeType": "YulAssignment",
                              "src": "1594:38:5",
                              "value": {
                                "name": "ERC1155SupplyStorageLocation",
                                "nativeSrc": "1604:28:5",
                                "nodeType": "YulIdentifier",
                                "src": "1604:28:5"
                              },
                              "variableNames": [
                                {
                                  "name": "$.slot",
                                  "nativeSrc": "1594:6:5",
                                  "nodeType": "YulIdentifier",
                                  "src": "1594:6:5"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "paris",
                        "externalReferences": [
                          {
                            "declaration": 2038,
                            "isOffset": false,
                            "isSlot": true,
                            "src": "1594:6:5",
                            "suffix": "slot",
                            "valueSize": 1
                          },
                          {
                            "declaration": 2034,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1604:28:5",
                            "valueSize": 1
                          }
                        ],
                        "id": 2040,
                        "nodeType": "InlineAssembly",
                        "src": "1571:71:5"
                      }
                    ]
                  },
                  "id": 2042,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_getERC1155SupplyStorage",
                  "nameLocation": "1480:24:5",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2035,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1504:2:5"
                  },
                  "returnParameters": {
                    "id": 2039,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2038,
                        "mutability": "mutable",
                        "name": "$",
                        "nameLocation": "1558:1:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 2042,
                        "src": "1529:30:5",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ERC1155SupplyStorage_$2031_storage_ptr",
                          "typeString": "struct ERC1155SupplyUpgradeable.ERC1155SupplyStorage"
                        },
                        "typeName": {
                          "id": 2037,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 2036,
                            "name": "ERC1155SupplyStorage",
                            "nameLocations": [
                              "1529:20:5"
                            ],
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 2031,
                            "src": "1529:20:5"
                          },
                          "referencedDeclaration": 2031,
                          "src": "1529:20:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ERC1155SupplyStorage_$2031_storage_ptr",
                            "typeString": "struct ERC1155SupplyUpgradeable.ERC1155SupplyStorage"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1528:32:5"
                  },
                  "scope": 2245,
                  "src": "1471:177:5",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 2047,
                    "nodeType": "Block",
                    "src": "1712:7:5",
                    "statements": []
                  },
                  "id": 2048,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 2045,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 2044,
                        "name": "onlyInitializing",
                        "nameLocations": [
                          "1695:16:5"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 722,
                        "src": "1695:16:5"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "1695:16:5"
                    }
                  ],
                  "name": "__ERC1155Supply_init",
                  "nameLocation": "1663:20:5",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2043,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1683:2:5"
                  },
                  "returnParameters": {
                    "id": 2046,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1712:0:5"
                  },
                  "scope": 2245,
                  "src": "1654:65:5",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2053,
                    "nodeType": "Block",
                    "src": "1793:7:5",
                    "statements": []
                  },
                  "id": 2054,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 2051,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 2050,
                        "name": "onlyInitializing",
                        "nameLocations": [
                          "1776:16:5"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 722,
                        "src": "1776:16:5"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "1776:16:5"
                    }
                  ],
                  "name": "__ERC1155Supply_init_unchained",
                  "nameLocation": "1734:30:5",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2049,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1764:2:5"
                  },
                  "returnParameters": {
                    "id": 2052,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1793:0:5"
                  },
                  "scope": 2245,
                  "src": "1725:75:5",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2073,
                    "nodeType": "Block",
                    "src": "1946:111:5",
                    "statements": [
                      {
                        "assignments": [
                          2064
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2064,
                            "mutability": "mutable",
                            "name": "$",
                            "nameLocation": "1985:1:5",
                            "nodeType": "VariableDeclaration",
                            "scope": 2073,
                            "src": "1956:30:5",
                            "stateVariable": false,
                            "storageLocation": "storage",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ERC1155SupplyStorage_$2031_storage_ptr",
                              "typeString": "struct ERC1155SupplyUpgradeable.ERC1155SupplyStorage"
                            },
                            "typeName": {
                              "id": 2063,
                              "nodeType": "UserDefinedTypeName",
                              "pathNode": {
                                "id": 2062,
                                "name": "ERC1155SupplyStorage",
                                "nameLocations": [
                                  "1956:20:5"
                                ],
                                "nodeType": "IdentifierPath",
                                "referencedDeclaration": 2031,
                                "src": "1956:20:5"
                              },
                              "referencedDeclaration": 2031,
                              "src": "1956:20:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_ERC1155SupplyStorage_$2031_storage_ptr",
                                "typeString": "struct ERC1155SupplyUpgradeable.ERC1155SupplyStorage"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 2067,
                        "initialValue": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 2065,
                            "name": "_getERC1155SupplyStorage",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2042,
                            "src": "1989:24:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_ERC1155SupplyStorage_$2031_storage_ptr_$",
                              "typeString": "function () pure returns (struct ERC1155SupplyUpgradeable.ERC1155SupplyStorage storage pointer)"
                            }
                          },
                          "id": 2066,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1989:26:5",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ERC1155SupplyStorage_$2031_storage_ptr",
                            "typeString": "struct ERC1155SupplyUpgradeable.ERC1155SupplyStorage storage pointer"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1956:59:5"
                      },
                      {
                        "expression": {
                          "baseExpression": {
                            "expression": {
                              "id": 2068,
                              "name": "$",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2064,
                              "src": "2032:1:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_ERC1155SupplyStorage_$2031_storage_ptr",
                                "typeString": "struct ERC1155SupplyUpgradeable.ERC1155SupplyStorage storage pointer"
                              }
                            },
                            "id": 2069,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "2034:12:5",
                            "memberName": "_totalSupply",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2028,
                            "src": "2032:14:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                              "typeString": "mapping(uint256 => uint256)"
                            }
                          },
                          "id": 2071,
                          "indexExpression": {
                            "id": 2070,
                            "name": "id",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2057,
                            "src": "2047:2:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "2032:18:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2061,
                        "id": 2072,
                        "nodeType": "Return",
                        "src": "2025:25:5"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2055,
                    "nodeType": "StructuredDocumentation",
                    "src": "1805:65:5",
                    "text": " @dev Total value of tokens in with a given id."
                  },
                  "functionSelector": "bd85b039",
                  "id": 2074,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "totalSupply",
                  "nameLocation": "1884:11:5",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2058,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2057,
                        "mutability": "mutable",
                        "name": "id",
                        "nameLocation": "1904:2:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 2074,
                        "src": "1896:10:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2056,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1896:7:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1895:12:5"
                  },
                  "returnParameters": {
                    "id": 2061,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2060,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2074,
                        "src": "1937:7:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2059,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1937:7:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1936:9:5"
                  },
                  "scope": 2245,
                  "src": "1875:182:5",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 2089,
                    "nodeType": "Block",
                    "src": "2175:110:5",
                    "statements": [
                      {
                        "assignments": [
                          2082
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2082,
                            "mutability": "mutable",
                            "name": "$",
                            "nameLocation": "2214:1:5",
                            "nodeType": "VariableDeclaration",
                            "scope": 2089,
                            "src": "2185:30:5",
                            "stateVariable": false,
                            "storageLocation": "storage",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ERC1155SupplyStorage_$2031_storage_ptr",
                              "typeString": "struct ERC1155SupplyUpgradeable.ERC1155SupplyStorage"
                            },
                            "typeName": {
                              "id": 2081,
                              "nodeType": "UserDefinedTypeName",
                              "pathNode": {
                                "id": 2080,
                                "name": "ERC1155SupplyStorage",
                                "nameLocations": [
                                  "2185:20:5"
                                ],
                                "nodeType": "IdentifierPath",
                                "referencedDeclaration": 2031,
                                "src": "2185:20:5"
                              },
                              "referencedDeclaration": 2031,
                              "src": "2185:20:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_ERC1155SupplyStorage_$2031_storage_ptr",
                                "typeString": "struct ERC1155SupplyUpgradeable.ERC1155SupplyStorage"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 2085,
                        "initialValue": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 2083,
                            "name": "_getERC1155SupplyStorage",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2042,
                            "src": "2218:24:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_ERC1155SupplyStorage_$2031_storage_ptr_$",
                              "typeString": "function () pure returns (struct ERC1155SupplyUpgradeable.ERC1155SupplyStorage storage pointer)"
                            }
                          },
                          "id": 2084,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2218:26:5",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ERC1155SupplyStorage_$2031_storage_ptr",
                            "typeString": "struct ERC1155SupplyUpgradeable.ERC1155SupplyStorage storage pointer"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2185:59:5"
                      },
                      {
                        "expression": {
                          "expression": {
                            "id": 2086,
                            "name": "$",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2082,
                            "src": "2261:1:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ERC1155SupplyStorage_$2031_storage_ptr",
                              "typeString": "struct ERC1155SupplyUpgradeable.ERC1155SupplyStorage storage pointer"
                            }
                          },
                          "id": 2087,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "2263:15:5",
                          "memberName": "_totalSupplyAll",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2030,
                          "src": "2261:17:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 2079,
                        "id": 2088,
                        "nodeType": "Return",
                        "src": "2254:24:5"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2075,
                    "nodeType": "StructuredDocumentation",
                    "src": "2063:46:5",
                    "text": " @dev Total value of tokens."
                  },
                  "functionSelector": "18160ddd",
                  "id": 2090,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "totalSupply",
                  "nameLocation": "2123:11:5",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2076,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2134:2:5"
                  },
                  "returnParameters": {
                    "id": 2079,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2078,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2090,
                        "src": "2166:7:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2077,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2166:7:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2165:9:5"
                  },
                  "scope": 2245,
                  "src": "2114:171:5",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 2104,
                    "nodeType": "Block",
                    "src": "2441:43:5",
                    "statements": [
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2102,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [
                              {
                                "id": 2099,
                                "name": "id",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2093,
                                "src": "2470:2:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 2098,
                              "name": "totalSupply",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [
                                2074,
                                2090
                              ],
                              "referencedDeclaration": 2074,
                              "src": "2458:11:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                                "typeString": "function (uint256) view returns (uint256)"
                              }
                            },
                            "id": 2100,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2458:15:5",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 2101,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2476:1:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "2458:19:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 2097,
                        "id": 2103,
                        "nodeType": "Return",
                        "src": "2451:26:5"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2091,
                    "nodeType": "StructuredDocumentation",
                    "src": "2291:82:5",
                    "text": " @dev Indicates whether any token exist with a given id, or not."
                  },
                  "functionSelector": "4f558e79",
                  "id": 2105,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "exists",
                  "nameLocation": "2387:6:5",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2094,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2093,
                        "mutability": "mutable",
                        "name": "id",
                        "nameLocation": "2402:2:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 2105,
                        "src": "2394:10:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2092,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2394:7:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2393:12:5"
                  },
                  "returnParameters": {
                    "id": 2097,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2096,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2105,
                        "src": "2435:4:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2095,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "2435:4:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2434:6:5"
                  },
                  "scope": 2245,
                  "src": "2378:106:5",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    1539
                  ],
                  "body": {
                    "id": 2243,
                    "nodeType": "Block",
                    "src": "2683:1517:5",
                    "statements": [
                      {
                        "assignments": [
                          2122
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2122,
                            "mutability": "mutable",
                            "name": "$",
                            "nameLocation": "2722:1:5",
                            "nodeType": "VariableDeclaration",
                            "scope": 2243,
                            "src": "2693:30:5",
                            "stateVariable": false,
                            "storageLocation": "storage",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ERC1155SupplyStorage_$2031_storage_ptr",
                              "typeString": "struct ERC1155SupplyUpgradeable.ERC1155SupplyStorage"
                            },
                            "typeName": {
                              "id": 2121,
                              "nodeType": "UserDefinedTypeName",
                              "pathNode": {
                                "id": 2120,
                                "name": "ERC1155SupplyStorage",
                                "nameLocations": [
                                  "2693:20:5"
                                ],
                                "nodeType": "IdentifierPath",
                                "referencedDeclaration": 2031,
                                "src": "2693:20:5"
                              },
                              "referencedDeclaration": 2031,
                              "src": "2693:20:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_ERC1155SupplyStorage_$2031_storage_ptr",
                                "typeString": "struct ERC1155SupplyUpgradeable.ERC1155SupplyStorage"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 2125,
                        "initialValue": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 2123,
                            "name": "_getERC1155SupplyStorage",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2042,
                            "src": "2726:24:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_ERC1155SupplyStorage_$2031_storage_ptr_$",
                              "typeString": "function () pure returns (struct ERC1155SupplyUpgradeable.ERC1155SupplyStorage storage pointer)"
                            }
                          },
                          "id": 2124,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2726:26:5",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ERC1155SupplyStorage_$2031_storage_ptr",
                            "typeString": "struct ERC1155SupplyUpgradeable.ERC1155SupplyStorage storage pointer"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2693:59:5"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 2129,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2108,
                              "src": "2776:4:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 2130,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2110,
                              "src": "2782:2:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 2131,
                              "name": "ids",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2113,
                              "src": "2786:3:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            },
                            {
                              "id": 2132,
                              "name": "values",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2116,
                              "src": "2791:6:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              },
                              {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            ],
                            "expression": {
                              "id": 2126,
                              "name": "super",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -25,
                              "src": "2762:5:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_super$_ERC1155SupplyUpgradeable_$2245_$",
                                "typeString": "type(contract super ERC1155SupplyUpgradeable)"
                              }
                            },
                            "id": 2128,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "2768:7:5",
                            "memberName": "_update",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1539,
                            "src": "2762:13:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$",
                              "typeString": "function (address,address,uint256[] memory,uint256[] memory)"
                            }
                          },
                          "id": 2133,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2762:36:5",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2134,
                        "nodeType": "ExpressionStatement",
                        "src": "2762:36:5"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 2140,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 2135,
                            "name": "from",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2108,
                            "src": "2813:4:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 2138,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2829:1:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 2137,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "2821:7:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 2136,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "2821:7:5",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 2139,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2821:10:5",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "2813:18:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 2187,
                        "nodeType": "IfStatement",
                        "src": "2809:575:5",
                        "trueBody": {
                          "id": 2186,
                          "nodeType": "Block",
                          "src": "2833:551:5",
                          "statements": [
                            {
                              "assignments": [
                                2142
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 2142,
                                  "mutability": "mutable",
                                  "name": "totalMintValue",
                                  "nameLocation": "2855:14:5",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 2186,
                                  "src": "2847:22:5",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 2141,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "2847:7:5",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 2144,
                              "initialValue": {
                                "hexValue": "30",
                                "id": 2143,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2872:1:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "2847:26:5"
                            },
                            {
                              "body": {
                                "id": 2178,
                                "nodeType": "Block",
                                "src": "2928:292:5",
                                "statements": [
                                  {
                                    "assignments": [
                                      2157
                                    ],
                                    "declarations": [
                                      {
                                        "constant": false,
                                        "id": 2157,
                                        "mutability": "mutable",
                                        "name": "value",
                                        "nameLocation": "2954:5:5",
                                        "nodeType": "VariableDeclaration",
                                        "scope": 2178,
                                        "src": "2946:13:5",
                                        "stateVariable": false,
                                        "storageLocation": "default",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "typeName": {
                                          "id": 2156,
                                          "name": "uint256",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "2946:7:5",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "visibility": "internal"
                                      }
                                    ],
                                    "id": 2162,
                                    "initialValue": {
                                      "arguments": [
                                        {
                                          "id": 2160,
                                          "name": "i",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2146,
                                          "src": "2988:1:5",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "expression": {
                                          "id": 2158,
                                          "name": "values",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2116,
                                          "src": "2962:6:5",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                            "typeString": "uint256[] memory"
                                          }
                                        },
                                        "id": 2159,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberLocation": "2969:18:5",
                                        "memberName": "unsafeMemoryAccess",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 4537,
                                        "src": "2962:25:5",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$returns$_t_uint256_$attached_to$_t_array$_t_uint256_$dyn_memory_ptr_$",
                                          "typeString": "function (uint256[] memory,uint256) pure returns (uint256)"
                                        }
                                      },
                                      "id": 2161,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "nameLocations": [],
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "2962:28:5",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "2946:44:5"
                                  },
                                  {
                                    "expression": {
                                      "id": 2172,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "baseExpression": {
                                          "expression": {
                                            "id": 2163,
                                            "name": "$",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2122,
                                            "src": "3114:1:5",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_ERC1155SupplyStorage_$2031_storage_ptr",
                                              "typeString": "struct ERC1155SupplyUpgradeable.ERC1155SupplyStorage storage pointer"
                                            }
                                          },
                                          "id": 2169,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberLocation": "3116:12:5",
                                          "memberName": "_totalSupply",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 2028,
                                          "src": "3114:14:5",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                                            "typeString": "mapping(uint256 => uint256)"
                                          }
                                        },
                                        "id": 2170,
                                        "indexExpression": {
                                          "arguments": [
                                            {
                                              "id": 2167,
                                              "name": "i",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 2146,
                                              "src": "3152:1:5",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": [
                                              {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            ],
                                            "expression": {
                                              "id": 2165,
                                              "name": "ids",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 2113,
                                              "src": "3129:3:5",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                                "typeString": "uint256[] memory"
                                              }
                                            },
                                            "id": 2166,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberLocation": "3133:18:5",
                                            "memberName": "unsafeMemoryAccess",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 4537,
                                            "src": "3129:22:5",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$returns$_t_uint256_$attached_to$_t_array$_t_uint256_$dyn_memory_ptr_$",
                                              "typeString": "function (uint256[] memory,uint256) pure returns (uint256)"
                                            }
                                          },
                                          "id": 2168,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "kind": "functionCall",
                                          "lValueRequested": false,
                                          "nameLocations": [],
                                          "names": [],
                                          "nodeType": "FunctionCall",
                                          "src": "3129:25:5",
                                          "tryCall": false,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": true,
                                        "nodeType": "IndexAccess",
                                        "src": "3114:41:5",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "+=",
                                      "rightHandSide": {
                                        "id": 2171,
                                        "name": "value",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2157,
                                        "src": "3159:5:5",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "3114:50:5",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 2173,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3114:50:5"
                                  },
                                  {
                                    "expression": {
                                      "id": 2176,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "id": 2174,
                                        "name": "totalMintValue",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2142,
                                        "src": "3182:14:5",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "+=",
                                      "rightHandSide": {
                                        "id": 2175,
                                        "name": "value",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2157,
                                        "src": "3200:5:5",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "3182:23:5",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 2177,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3182:23:5"
                                  }
                                ]
                              },
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 2152,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 2149,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2146,
                                  "src": "2907:1:5",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<",
                                "rightExpression": {
                                  "expression": {
                                    "id": 2150,
                                    "name": "ids",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2113,
                                    "src": "2911:3:5",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                      "typeString": "uint256[] memory"
                                    }
                                  },
                                  "id": 2151,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "2915:6:5",
                                  "memberName": "length",
                                  "nodeType": "MemberAccess",
                                  "src": "2911:10:5",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "2907:14:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 2179,
                              "initializationExpression": {
                                "assignments": [
                                  2146
                                ],
                                "declarations": [
                                  {
                                    "constant": false,
                                    "id": 2146,
                                    "mutability": "mutable",
                                    "name": "i",
                                    "nameLocation": "2900:1:5",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 2179,
                                    "src": "2892:9:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "typeName": {
                                      "id": 2145,
                                      "name": "uint256",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "2892:7:5",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "visibility": "internal"
                                  }
                                ],
                                "id": 2148,
                                "initialValue": {
                                  "hexValue": "30",
                                  "id": 2147,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2904:1:5",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "nodeType": "VariableDeclarationStatement",
                                "src": "2892:13:5"
                              },
                              "isSimpleCounterLoop": true,
                              "loopExpression": {
                                "expression": {
                                  "id": 2154,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "UnaryOperation",
                                  "operator": "++",
                                  "prefix": true,
                                  "src": "2923:3:5",
                                  "subExpression": {
                                    "id": 2153,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2146,
                                    "src": "2925:1:5",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 2155,
                                "nodeType": "ExpressionStatement",
                                "src": "2923:3:5"
                              },
                              "nodeType": "ForStatement",
                              "src": "2887:333:5"
                            },
                            {
                              "expression": {
                                "id": 2184,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "expression": {
                                    "id": 2180,
                                    "name": "$",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2122,
                                    "src": "3338:1:5",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_ERC1155SupplyStorage_$2031_storage_ptr",
                                      "typeString": "struct ERC1155SupplyUpgradeable.ERC1155SupplyStorage storage pointer"
                                    }
                                  },
                                  "id": 2182,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "memberLocation": "3340:15:5",
                                  "memberName": "_totalSupplyAll",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 2030,
                                  "src": "3338:17:5",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "+=",
                                "rightHandSide": {
                                  "id": 2183,
                                  "name": "totalMintValue",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2142,
                                  "src": "3359:14:5",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "3338:35:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 2185,
                              "nodeType": "ExpressionStatement",
                              "src": "3338:35:5"
                            }
                          ]
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 2193,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 2188,
                            "name": "to",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2110,
                            "src": "3398:2:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 2191,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3412:1:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 2190,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "3404:7:5",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 2189,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "3404:7:5",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 2192,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3404:10:5",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "3398:16:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 2242,
                        "nodeType": "IfStatement",
                        "src": "3394:800:5",
                        "trueBody": {
                          "id": 2241,
                          "nodeType": "Block",
                          "src": "3416:778:5",
                          "statements": [
                            {
                              "assignments": [
                                2195
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 2195,
                                  "mutability": "mutable",
                                  "name": "totalBurnValue",
                                  "nameLocation": "3438:14:5",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 2241,
                                  "src": "3430:22:5",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 2194,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "3430:7:5",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 2197,
                              "initialValue": {
                                "hexValue": "30",
                                "id": 2196,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3455:1:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "3430:26:5"
                            },
                            {
                              "body": {
                                "id": 2232,
                                "nodeType": "Block",
                                "src": "3511:458:5",
                                "statements": [
                                  {
                                    "assignments": [
                                      2210
                                    ],
                                    "declarations": [
                                      {
                                        "constant": false,
                                        "id": 2210,
                                        "mutability": "mutable",
                                        "name": "value",
                                        "nameLocation": "3537:5:5",
                                        "nodeType": "VariableDeclaration",
                                        "scope": 2232,
                                        "src": "3529:13:5",
                                        "stateVariable": false,
                                        "storageLocation": "default",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "typeName": {
                                          "id": 2209,
                                          "name": "uint256",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "3529:7:5",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "visibility": "internal"
                                      }
                                    ],
                                    "id": 2215,
                                    "initialValue": {
                                      "arguments": [
                                        {
                                          "id": 2213,
                                          "name": "i",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2199,
                                          "src": "3571:1:5",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "expression": {
                                          "id": 2211,
                                          "name": "values",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2116,
                                          "src": "3545:6:5",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                            "typeString": "uint256[] memory"
                                          }
                                        },
                                        "id": 2212,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberLocation": "3552:18:5",
                                        "memberName": "unsafeMemoryAccess",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 4537,
                                        "src": "3545:25:5",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$returns$_t_uint256_$attached_to$_t_array$_t_uint256_$dyn_memory_ptr_$",
                                          "typeString": "function (uint256[] memory,uint256) pure returns (uint256)"
                                        }
                                      },
                                      "id": 2214,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "nameLocations": [],
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "3545:28:5",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "3529:44:5"
                                  },
                                  {
                                    "id": 2231,
                                    "nodeType": "UncheckedBlock",
                                    "src": "3592:363:5",
                                    "statements": [
                                      {
                                        "expression": {
                                          "id": 2225,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftHandSide": {
                                            "baseExpression": {
                                              "expression": {
                                                "id": 2216,
                                                "name": "$",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 2122,
                                                "src": "3730:1:5",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_struct$_ERC1155SupplyStorage_$2031_storage_ptr",
                                                  "typeString": "struct ERC1155SupplyUpgradeable.ERC1155SupplyStorage storage pointer"
                                                }
                                              },
                                              "id": 2222,
                                              "isConstant": false,
                                              "isLValue": true,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "memberLocation": "3732:12:5",
                                              "memberName": "_totalSupply",
                                              "nodeType": "MemberAccess",
                                              "referencedDeclaration": 2028,
                                              "src": "3730:14:5",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                                                "typeString": "mapping(uint256 => uint256)"
                                              }
                                            },
                                            "id": 2223,
                                            "indexExpression": {
                                              "arguments": [
                                                {
                                                  "id": 2220,
                                                  "name": "i",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 2199,
                                                  "src": "3768:1:5",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  }
                                                }
                                              ],
                                              "expression": {
                                                "argumentTypes": [
                                                  {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  }
                                                ],
                                                "expression": {
                                                  "id": 2218,
                                                  "name": "ids",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 2113,
                                                  "src": "3745:3:5",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                                    "typeString": "uint256[] memory"
                                                  }
                                                },
                                                "id": 2219,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberLocation": "3749:18:5",
                                                "memberName": "unsafeMemoryAccess",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 4537,
                                                "src": "3745:22:5",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$returns$_t_uint256_$attached_to$_t_array$_t_uint256_$dyn_memory_ptr_$",
                                                  "typeString": "function (uint256[] memory,uint256) pure returns (uint256)"
                                                }
                                              },
                                              "id": 2221,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "kind": "functionCall",
                                              "lValueRequested": false,
                                              "nameLocations": [],
                                              "names": [],
                                              "nodeType": "FunctionCall",
                                              "src": "3745:25:5",
                                              "tryCall": false,
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "nodeType": "IndexAccess",
                                            "src": "3730:41:5",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "Assignment",
                                          "operator": "-=",
                                          "rightHandSide": {
                                            "id": 2224,
                                            "name": "value",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2210,
                                            "src": "3775:5:5",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "src": "3730:50:5",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "id": 2226,
                                        "nodeType": "ExpressionStatement",
                                        "src": "3730:50:5"
                                      },
                                      {
                                        "expression": {
                                          "id": 2229,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftHandSide": {
                                            "id": 2227,
                                            "name": "totalBurnValue",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2195,
                                            "src": "3913:14:5",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "Assignment",
                                          "operator": "+=",
                                          "rightHandSide": {
                                            "id": 2228,
                                            "name": "value",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2210,
                                            "src": "3931:5:5",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "src": "3913:23:5",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "id": 2230,
                                        "nodeType": "ExpressionStatement",
                                        "src": "3913:23:5"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 2205,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 2202,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2199,
                                  "src": "3490:1:5",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<",
                                "rightExpression": {
                                  "expression": {
                                    "id": 2203,
                                    "name": "ids",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2113,
                                    "src": "3494:3:5",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                      "typeString": "uint256[] memory"
                                    }
                                  },
                                  "id": 2204,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "3498:6:5",
                                  "memberName": "length",
                                  "nodeType": "MemberAccess",
                                  "src": "3494:10:5",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "3490:14:5",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 2233,
                              "initializationExpression": {
                                "assignments": [
                                  2199
                                ],
                                "declarations": [
                                  {
                                    "constant": false,
                                    "id": 2199,
                                    "mutability": "mutable",
                                    "name": "i",
                                    "nameLocation": "3483:1:5",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 2233,
                                    "src": "3475:9:5",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "typeName": {
                                      "id": 2198,
                                      "name": "uint256",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "3475:7:5",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "visibility": "internal"
                                  }
                                ],
                                "id": 2201,
                                "initialValue": {
                                  "hexValue": "30",
                                  "id": 2200,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3487:1:5",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "nodeType": "VariableDeclarationStatement",
                                "src": "3475:13:5"
                              },
                              "isSimpleCounterLoop": true,
                              "loopExpression": {
                                "expression": {
                                  "id": 2207,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "UnaryOperation",
                                  "operator": "++",
                                  "prefix": true,
                                  "src": "3506:3:5",
                                  "subExpression": {
                                    "id": 2206,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2199,
                                    "src": "3508:1:5",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 2208,
                                "nodeType": "ExpressionStatement",
                                "src": "3506:3:5"
                              },
                              "nodeType": "ForStatement",
                              "src": "3470:499:5"
                            },
                            {
                              "id": 2240,
                              "nodeType": "UncheckedBlock",
                              "src": "3982:202:5",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 2238,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "expression": {
                                        "id": 2234,
                                        "name": "$",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2122,
                                        "src": "4134:1:5",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_ERC1155SupplyStorage_$2031_storage_ptr",
                                          "typeString": "struct ERC1155SupplyUpgradeable.ERC1155SupplyStorage storage pointer"
                                        }
                                      },
                                      "id": 2236,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": true,
                                      "memberLocation": "4136:15:5",
                                      "memberName": "_totalSupplyAll",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 2030,
                                      "src": "4134:17:5",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "-=",
                                    "rightHandSide": {
                                      "id": 2237,
                                      "name": "totalBurnValue",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2195,
                                      "src": "4155:14:5",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "4134:35:5",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 2239,
                                  "nodeType": "ExpressionStatement",
                                  "src": "4134:35:5"
                                }
                              ]
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2106,
                    "nodeType": "StructuredDocumentation",
                    "src": "2490:34:5",
                    "text": "@inheritdoc ERC1155Upgradeable"
                  },
                  "id": 2244,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_update",
                  "nameLocation": "2538:7:5",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 2118,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "2674:8:5"
                  },
                  "parameters": {
                    "id": 2117,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2108,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "2563:4:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 2244,
                        "src": "2555:12:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2107,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2555:7:5",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2110,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "2585:2:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 2244,
                        "src": "2577:10:5",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2109,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2577:7:5",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2113,
                        "mutability": "mutable",
                        "name": "ids",
                        "nameLocation": "2614:3:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 2244,
                        "src": "2597:20:5",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 2111,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "2597:7:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 2112,
                          "nodeType": "ArrayTypeName",
                          "src": "2597:9:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                            "typeString": "uint256[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2116,
                        "mutability": "mutable",
                        "name": "values",
                        "nameLocation": "2644:6:5",
                        "nodeType": "VariableDeclaration",
                        "scope": 2244,
                        "src": "2627:23:5",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 2114,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "2627:7:5",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 2115,
                          "nodeType": "ArrayTypeName",
                          "src": "2627:9:5",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                            "typeString": "uint256[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2545:111:5"
                  },
                  "returnParameters": {
                    "id": 2119,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2683:0:5"
                  },
                  "scope": 2245,
                  "src": "2529:1671:5",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                }
              ],
              "scope": 2246,
              "src": "903:3299:5",
              "usedErrors": [
                576,
                579,
                2707,
                2712,
                2717,
                2724,
                2729,
                2734,
                2741
              ],
              "usedEvents": [
                584,
                3066,
                3081,
                3090,
                3097
              ]
            }
          ],
          "src": "126:4077:5"
        },
        "id": 5
      },
      "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol",
          "exportedSymbols": {
            "ContextUpgradeable": [
              2291
            ],
            "Initializable": [
              827
            ]
          },
          "id": 2292,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 2247,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".20"
              ],
              "nodeType": "PragmaDirective",
              "src": "101:24:6"
            },
            {
              "absolutePath": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol",
              "file": "../proxy/utils/Initializable.sol",
              "id": 2249,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 2292,
              "sourceUnit": 828,
              "src": "126:63:6",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 2248,
                    "name": "Initializable",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 827,
                    "src": "134:13:6",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "abstract": true,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 2251,
                    "name": "Initializable",
                    "nameLocations": [
                      "728:13:6"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 827,
                    "src": "728:13:6"
                  },
                  "id": 2252,
                  "nodeType": "InheritanceSpecifier",
                  "src": "728:13:6"
                }
              ],
              "canonicalName": "ContextUpgradeable",
              "contractDependencies": [],
              "contractKind": "contract",
              "documentation": {
                "id": 2250,
                "nodeType": "StructuredDocumentation",
                "src": "191:496:6",
                "text": " @dev Provides information about the current execution context, including the\n sender of the transaction and its data. While these are generally available\n via msg.sender and msg.data, they should not be accessed in such a direct\n manner, since when dealing with meta-transactions the account sending and\n paying for execution may not be the actual sender (as far as an application\n is concerned).\n This contract is only required for intermediate, library-like contracts."
              },
              "fullyImplemented": true,
              "id": 2291,
              "linearizedBaseContracts": [
                2291,
                827
              ],
              "name": "ContextUpgradeable",
              "nameLocation": "706:18:6",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 2257,
                    "nodeType": "Block",
                    "src": "800:7:6",
                    "statements": []
                  },
                  "id": 2258,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 2255,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 2254,
                        "name": "onlyInitializing",
                        "nameLocations": [
                          "783:16:6"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 722,
                        "src": "783:16:6"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "783:16:6"
                    }
                  ],
                  "name": "__Context_init",
                  "nameLocation": "757:14:6",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2253,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "771:2:6"
                  },
                  "returnParameters": {
                    "id": 2256,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "800:0:6"
                  },
                  "scope": 2291,
                  "src": "748:59:6",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2263,
                    "nodeType": "Block",
                    "src": "875:7:6",
                    "statements": []
                  },
                  "id": 2264,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 2261,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 2260,
                        "name": "onlyInitializing",
                        "nameLocations": [
                          "858:16:6"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 722,
                        "src": "858:16:6"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "858:16:6"
                    }
                  ],
                  "name": "__Context_init_unchained",
                  "nameLocation": "822:24:6",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2259,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "846:2:6"
                  },
                  "returnParameters": {
                    "id": 2262,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "875:0:6"
                  },
                  "scope": 2291,
                  "src": "813:69:6",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2272,
                    "nodeType": "Block",
                    "src": "949:34:6",
                    "statements": [
                      {
                        "expression": {
                          "expression": {
                            "id": 2269,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "966:3:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 2270,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "970:6:6",
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "966:10:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "functionReturnParameters": 2268,
                        "id": 2271,
                        "nodeType": "Return",
                        "src": "959:17:6"
                      }
                    ]
                  },
                  "id": 2273,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_msgSender",
                  "nameLocation": "896:10:6",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2265,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "906:2:6"
                  },
                  "returnParameters": {
                    "id": 2268,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2267,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2273,
                        "src": "940:7:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2266,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "940:7:6",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "939:9:6"
                  },
                  "scope": 2291,
                  "src": "887:96:6",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2281,
                    "nodeType": "Block",
                    "src": "1056:32:6",
                    "statements": [
                      {
                        "expression": {
                          "expression": {
                            "id": 2278,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "1073:3:6",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 2279,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "1077:4:6",
                          "memberName": "data",
                          "nodeType": "MemberAccess",
                          "src": "1073:8:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        },
                        "functionReturnParameters": 2277,
                        "id": 2280,
                        "nodeType": "Return",
                        "src": "1066:15:6"
                      }
                    ]
                  },
                  "id": 2282,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_msgData",
                  "nameLocation": "998:8:6",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2274,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1006:2:6"
                  },
                  "returnParameters": {
                    "id": 2277,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2276,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2282,
                        "src": "1040:14:6",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 2275,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "1040:5:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1039:16:6"
                  },
                  "scope": 2291,
                  "src": "989:99:6",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2289,
                    "nodeType": "Block",
                    "src": "1166:25:6",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "30",
                          "id": 2287,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1183:1:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "functionReturnParameters": 2286,
                        "id": 2288,
                        "nodeType": "Return",
                        "src": "1176:8:6"
                      }
                    ]
                  },
                  "id": 2290,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_contextSuffixLength",
                  "nameLocation": "1103:20:6",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2283,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1123:2:6"
                  },
                  "returnParameters": {
                    "id": 2286,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2285,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2290,
                        "src": "1157:7:6",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2284,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1157:7:6",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1156:9:6"
                  },
                  "scope": 2291,
                  "src": "1094:97:6",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "internal"
                }
              ],
              "scope": 2292,
              "src": "688:505:6",
              "usedErrors": [
                576,
                579
              ],
              "usedEvents": [
                584
              ]
            }
          ],
          "src": "101:1093:6"
        },
        "id": 6
      },
      "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol",
          "exportedSymbols": {
            "ContextUpgradeable": [
              2291
            ],
            "Initializable": [
              827
            ],
            "PausableUpgradeable": [
              2451
            ]
          },
          "id": 2452,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 2293,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".20"
              ],
              "nodeType": "PragmaDirective",
              "src": "102:24:7"
            },
            {
              "absolutePath": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol",
              "file": "../utils/ContextUpgradeable.sol",
              "id": 2295,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 2452,
              "sourceUnit": 2292,
              "src": "128:67:7",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 2294,
                    "name": "ContextUpgradeable",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2291,
                    "src": "136:18:7",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol",
              "file": "../proxy/utils/Initializable.sol",
              "id": 2297,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 2452,
              "sourceUnit": 828,
              "src": "196:63:7",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 2296,
                    "name": "Initializable",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 827,
                    "src": "204:13:7",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "abstract": true,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 2299,
                    "name": "Initializable",
                    "nameLocations": [
                      "742:13:7"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 827,
                    "src": "742:13:7"
                  },
                  "id": 2300,
                  "nodeType": "InheritanceSpecifier",
                  "src": "742:13:7"
                },
                {
                  "baseName": {
                    "id": 2301,
                    "name": "ContextUpgradeable",
                    "nameLocations": [
                      "757:18:7"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 2291,
                    "src": "757:18:7"
                  },
                  "id": 2302,
                  "nodeType": "InheritanceSpecifier",
                  "src": "757:18:7"
                }
              ],
              "canonicalName": "PausableUpgradeable",
              "contractDependencies": [],
              "contractKind": "contract",
              "documentation": {
                "id": 2298,
                "nodeType": "StructuredDocumentation",
                "src": "261:439:7",
                "text": " @dev Contract module which allows children to implement an emergency stop\n mechanism that can be triggered by an authorized account.\n This module is used through inheritance. It will make available the\n modifiers `whenNotPaused` and `whenPaused`, which can be applied to\n the functions of your contract. Note that they will not be pausable by\n simply including this module, only once the modifiers are put in place."
              },
              "fullyImplemented": true,
              "id": 2451,
              "linearizedBaseContracts": [
                2451,
                2291,
                827
              ],
              "name": "PausableUpgradeable",
              "nameLocation": "719:19:7",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "canonicalName": "PausableUpgradeable.PausableStorage",
                  "documentation": {
                    "id": 2303,
                    "nodeType": "StructuredDocumentation",
                    "src": "782:66:7",
                    "text": "@custom:storage-location erc7201:openzeppelin.storage.Pausable"
                  },
                  "id": 2306,
                  "members": [
                    {
                      "constant": false,
                      "id": 2305,
                      "mutability": "mutable",
                      "name": "_paused",
                      "nameLocation": "891:7:7",
                      "nodeType": "VariableDeclaration",
                      "scope": 2306,
                      "src": "886:12:7",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 2304,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "886:4:7",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "name": "PausableStorage",
                  "nameLocation": "860:15:7",
                  "nodeType": "StructDefinition",
                  "scope": 2451,
                  "src": "853:52:7",
                  "visibility": "public"
                },
                {
                  "constant": true,
                  "id": 2309,
                  "mutability": "constant",
                  "name": "PausableStorageLocation",
                  "nameLocation": "1048:23:7",
                  "nodeType": "VariableDeclaration",
                  "scope": 2451,
                  "src": "1023:117:7",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 2307,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1023:7:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": {
                    "hexValue": "307863643565643135633665313837653737653961656538383138346332316634663231383261623538323763623362376530376662656463643633663033333030",
                    "id": 2308,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1074:66:7",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_92891662540554778686986514950364265630913525426840345632122912437671245656832_by_1",
                      "typeString": "int_const 9289...(69 digits omitted)...6832"
                    },
                    "value": "0xcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300"
                  },
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 2316,
                    "nodeType": "Block",
                    "src": "1227:82:7",
                    "statements": [
                      {
                        "AST": {
                          "nativeSrc": "1246:57:7",
                          "nodeType": "YulBlock",
                          "src": "1246:57:7",
                          "statements": [
                            {
                              "nativeSrc": "1260:33:7",
                              "nodeType": "YulAssignment",
                              "src": "1260:33:7",
                              "value": {
                                "name": "PausableStorageLocation",
                                "nativeSrc": "1270:23:7",
                                "nodeType": "YulIdentifier",
                                "src": "1270:23:7"
                              },
                              "variableNames": [
                                {
                                  "name": "$.slot",
                                  "nativeSrc": "1260:6:7",
                                  "nodeType": "YulIdentifier",
                                  "src": "1260:6:7"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "paris",
                        "externalReferences": [
                          {
                            "declaration": 2313,
                            "isOffset": false,
                            "isSlot": true,
                            "src": "1260:6:7",
                            "suffix": "slot",
                            "valueSize": 1
                          },
                          {
                            "declaration": 2309,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1270:23:7",
                            "valueSize": 1
                          }
                        ],
                        "id": 2315,
                        "nodeType": "InlineAssembly",
                        "src": "1237:66:7"
                      }
                    ]
                  },
                  "id": 2317,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_getPausableStorage",
                  "nameLocation": "1156:19:7",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2310,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1175:2:7"
                  },
                  "returnParameters": {
                    "id": 2314,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2313,
                        "mutability": "mutable",
                        "name": "$",
                        "nameLocation": "1224:1:7",
                        "nodeType": "VariableDeclaration",
                        "scope": 2317,
                        "src": "1200:25:7",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_PausableStorage_$2306_storage_ptr",
                          "typeString": "struct PausableUpgradeable.PausableStorage"
                        },
                        "typeName": {
                          "id": 2312,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 2311,
                            "name": "PausableStorage",
                            "nameLocations": [
                              "1200:15:7"
                            ],
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 2306,
                            "src": "1200:15:7"
                          },
                          "referencedDeclaration": 2306,
                          "src": "1200:15:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_PausableStorage_$2306_storage_ptr",
                            "typeString": "struct PausableUpgradeable.PausableStorage"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1199:27:7"
                  },
                  "scope": 2451,
                  "src": "1147:162:7",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "private"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2318,
                    "nodeType": "StructuredDocumentation",
                    "src": "1315:73:7",
                    "text": " @dev Emitted when the pause is triggered by `account`."
                  },
                  "eventSelector": "62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258",
                  "id": 2322,
                  "name": "Paused",
                  "nameLocation": "1399:6:7",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2321,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2320,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "account",
                        "nameLocation": "1414:7:7",
                        "nodeType": "VariableDeclaration",
                        "scope": 2322,
                        "src": "1406:15:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2319,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1406:7:7",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1405:17:7"
                  },
                  "src": "1393:30:7"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2323,
                    "nodeType": "StructuredDocumentation",
                    "src": "1429:70:7",
                    "text": " @dev Emitted when the pause is lifted by `account`."
                  },
                  "eventSelector": "5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa",
                  "id": 2327,
                  "name": "Unpaused",
                  "nameLocation": "1510:8:7",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2326,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2325,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "account",
                        "nameLocation": "1527:7:7",
                        "nodeType": "VariableDeclaration",
                        "scope": 2327,
                        "src": "1519:15:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2324,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1519:7:7",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1518:17:7"
                  },
                  "src": "1504:32:7"
                },
                {
                  "documentation": {
                    "id": 2328,
                    "nodeType": "StructuredDocumentation",
                    "src": "1542:76:7",
                    "text": " @dev The operation failed because the contract is paused."
                  },
                  "errorSelector": "d93c0665",
                  "id": 2330,
                  "name": "EnforcedPause",
                  "nameLocation": "1629:13:7",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 2329,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1642:2:7"
                  },
                  "src": "1623:22:7"
                },
                {
                  "documentation": {
                    "id": 2331,
                    "nodeType": "StructuredDocumentation",
                    "src": "1651:80:7",
                    "text": " @dev The operation failed because the contract is not paused."
                  },
                  "errorSelector": "8dfc202b",
                  "id": 2333,
                  "name": "ExpectedPause",
                  "nameLocation": "1742:13:7",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 2332,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1755:2:7"
                  },
                  "src": "1736:22:7"
                },
                {
                  "body": {
                    "id": 2340,
                    "nodeType": "Block",
                    "src": "1969:47:7",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 2336,
                            "name": "_requireNotPaused",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2389,
                            "src": "1979:17:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$__$",
                              "typeString": "function () view"
                            }
                          },
                          "id": 2337,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1979:19:7",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2338,
                        "nodeType": "ExpressionStatement",
                        "src": "1979:19:7"
                      },
                      {
                        "id": 2339,
                        "nodeType": "PlaceholderStatement",
                        "src": "2008:1:7"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2334,
                    "nodeType": "StructuredDocumentation",
                    "src": "1764:175:7",
                    "text": " @dev Modifier to make a function callable only when the contract is not paused.\n Requirements:\n - The contract must not be paused."
                  },
                  "id": 2341,
                  "name": "whenNotPaused",
                  "nameLocation": "1953:13:7",
                  "nodeType": "ModifierDefinition",
                  "parameters": {
                    "id": 2335,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1966:2:7"
                  },
                  "src": "1944:72:7",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2348,
                    "nodeType": "Block",
                    "src": "2216:44:7",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 2344,
                            "name": "_requirePaused",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2402,
                            "src": "2226:14:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$__$",
                              "typeString": "function () view"
                            }
                          },
                          "id": 2345,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2226:16:7",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2346,
                        "nodeType": "ExpressionStatement",
                        "src": "2226:16:7"
                      },
                      {
                        "id": 2347,
                        "nodeType": "PlaceholderStatement",
                        "src": "2252:1:7"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2342,
                    "nodeType": "StructuredDocumentation",
                    "src": "2022:167:7",
                    "text": " @dev Modifier to make a function callable only when the contract is paused.\n Requirements:\n - The contract must be paused."
                  },
                  "id": 2349,
                  "name": "whenPaused",
                  "nameLocation": "2203:10:7",
                  "nodeType": "ModifierDefinition",
                  "parameters": {
                    "id": 2343,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2213:2:7"
                  },
                  "src": "2194:66:7",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2354,
                    "nodeType": "Block",
                    "src": "2319:7:7",
                    "statements": []
                  },
                  "id": 2355,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 2352,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 2351,
                        "name": "onlyInitializing",
                        "nameLocations": [
                          "2302:16:7"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 722,
                        "src": "2302:16:7"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "2302:16:7"
                    }
                  ],
                  "name": "__Pausable_init",
                  "nameLocation": "2275:15:7",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2350,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2290:2:7"
                  },
                  "returnParameters": {
                    "id": 2353,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2319:0:7"
                  },
                  "scope": 2451,
                  "src": "2266:60:7",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2360,
                    "nodeType": "Block",
                    "src": "2395:7:7",
                    "statements": []
                  },
                  "id": 2361,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 2358,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 2357,
                        "name": "onlyInitializing",
                        "nameLocations": [
                          "2378:16:7"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 722,
                        "src": "2378:16:7"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "2378:16:7"
                    }
                  ],
                  "name": "__Pausable_init_unchained",
                  "nameLocation": "2341:25:7",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2356,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2366:2:7"
                  },
                  "returnParameters": {
                    "id": 2359,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2395:0:7"
                  },
                  "scope": 2451,
                  "src": "2332:70:7",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2376,
                    "nodeType": "Block",
                    "src": "2549:92:7",
                    "statements": [
                      {
                        "assignments": [
                          2369
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2369,
                            "mutability": "mutable",
                            "name": "$",
                            "nameLocation": "2583:1:7",
                            "nodeType": "VariableDeclaration",
                            "scope": 2376,
                            "src": "2559:25:7",
                            "stateVariable": false,
                            "storageLocation": "storage",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_PausableStorage_$2306_storage_ptr",
                              "typeString": "struct PausableUpgradeable.PausableStorage"
                            },
                            "typeName": {
                              "id": 2368,
                              "nodeType": "UserDefinedTypeName",
                              "pathNode": {
                                "id": 2367,
                                "name": "PausableStorage",
                                "nameLocations": [
                                  "2559:15:7"
                                ],
                                "nodeType": "IdentifierPath",
                                "referencedDeclaration": 2306,
                                "src": "2559:15:7"
                              },
                              "referencedDeclaration": 2306,
                              "src": "2559:15:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_PausableStorage_$2306_storage_ptr",
                                "typeString": "struct PausableUpgradeable.PausableStorage"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 2372,
                        "initialValue": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 2370,
                            "name": "_getPausableStorage",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2317,
                            "src": "2587:19:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_PausableStorage_$2306_storage_ptr_$",
                              "typeString": "function () pure returns (struct PausableUpgradeable.PausableStorage storage pointer)"
                            }
                          },
                          "id": 2371,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2587:21:7",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_PausableStorage_$2306_storage_ptr",
                            "typeString": "struct PausableUpgradeable.PausableStorage storage pointer"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2559:49:7"
                      },
                      {
                        "expression": {
                          "expression": {
                            "id": 2373,
                            "name": "$",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2369,
                            "src": "2625:1:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_PausableStorage_$2306_storage_ptr",
                              "typeString": "struct PausableUpgradeable.PausableStorage storage pointer"
                            }
                          },
                          "id": 2374,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "2627:7:7",
                          "memberName": "_paused",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2305,
                          "src": "2625:9:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 2366,
                        "id": 2375,
                        "nodeType": "Return",
                        "src": "2618:16:7"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2362,
                    "nodeType": "StructuredDocumentation",
                    "src": "2407:84:7",
                    "text": " @dev Returns true if the contract is paused, and false otherwise."
                  },
                  "functionSelector": "5c975abb",
                  "id": 2377,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "paused",
                  "nameLocation": "2505:6:7",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2363,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2511:2:7"
                  },
                  "returnParameters": {
                    "id": 2366,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2365,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2377,
                        "src": "2543:4:7",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2364,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "2543:4:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2542:6:7"
                  },
                  "scope": 2451,
                  "src": "2496:145:7",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 2388,
                    "nodeType": "Block",
                    "src": "2760:77:7",
                    "statements": [
                      {
                        "condition": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 2381,
                            "name": "paused",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2377,
                            "src": "2774:6:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$",
                              "typeString": "function () view returns (bool)"
                            }
                          },
                          "id": 2382,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2774:8:7",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 2387,
                        "nodeType": "IfStatement",
                        "src": "2770:61:7",
                        "trueBody": {
                          "id": 2386,
                          "nodeType": "Block",
                          "src": "2784:47:7",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 2383,
                                  "name": "EnforcedPause",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2330,
                                  "src": "2805:13:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                                    "typeString": "function () pure returns (error)"
                                  }
                                },
                                "id": 2384,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2805:15:7",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 2385,
                              "nodeType": "RevertStatement",
                              "src": "2798:22:7"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2378,
                    "nodeType": "StructuredDocumentation",
                    "src": "2647:57:7",
                    "text": " @dev Throws if the contract is paused."
                  },
                  "id": 2389,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_requireNotPaused",
                  "nameLocation": "2718:17:7",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2379,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2735:2:7"
                  },
                  "returnParameters": {
                    "id": 2380,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2760:0:7"
                  },
                  "scope": 2451,
                  "src": "2709:128:7",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2401,
                    "nodeType": "Block",
                    "src": "2957:78:7",
                    "statements": [
                      {
                        "condition": {
                          "id": 2395,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "2971:9:7",
                          "subExpression": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 2393,
                              "name": "paused",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2377,
                              "src": "2972:6:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$",
                                "typeString": "function () view returns (bool)"
                              }
                            },
                            "id": 2394,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2972:8:7",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 2400,
                        "nodeType": "IfStatement",
                        "src": "2967:62:7",
                        "trueBody": {
                          "id": 2399,
                          "nodeType": "Block",
                          "src": "2982:47:7",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 2396,
                                  "name": "ExpectedPause",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2333,
                                  "src": "3003:13:7",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                                    "typeString": "function () pure returns (error)"
                                  }
                                },
                                "id": 2397,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3003:15:7",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 2398,
                              "nodeType": "RevertStatement",
                              "src": "2996:22:7"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2390,
                    "nodeType": "StructuredDocumentation",
                    "src": "2843:61:7",
                    "text": " @dev Throws if the contract is not paused."
                  },
                  "id": 2402,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_requirePaused",
                  "nameLocation": "2918:14:7",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2391,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2932:2:7"
                  },
                  "returnParameters": {
                    "id": 2392,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2957:0:7"
                  },
                  "scope": 2451,
                  "src": "2909:126:7",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2425,
                    "nodeType": "Block",
                    "src": "3219:127:7",
                    "statements": [
                      {
                        "assignments": [
                          2410
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2410,
                            "mutability": "mutable",
                            "name": "$",
                            "nameLocation": "3253:1:7",
                            "nodeType": "VariableDeclaration",
                            "scope": 2425,
                            "src": "3229:25:7",
                            "stateVariable": false,
                            "storageLocation": "storage",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_PausableStorage_$2306_storage_ptr",
                              "typeString": "struct PausableUpgradeable.PausableStorage"
                            },
                            "typeName": {
                              "id": 2409,
                              "nodeType": "UserDefinedTypeName",
                              "pathNode": {
                                "id": 2408,
                                "name": "PausableStorage",
                                "nameLocations": [
                                  "3229:15:7"
                                ],
                                "nodeType": "IdentifierPath",
                                "referencedDeclaration": 2306,
                                "src": "3229:15:7"
                              },
                              "referencedDeclaration": 2306,
                              "src": "3229:15:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_PausableStorage_$2306_storage_ptr",
                                "typeString": "struct PausableUpgradeable.PausableStorage"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 2413,
                        "initialValue": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 2411,
                            "name": "_getPausableStorage",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2317,
                            "src": "3257:19:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_PausableStorage_$2306_storage_ptr_$",
                              "typeString": "function () pure returns (struct PausableUpgradeable.PausableStorage storage pointer)"
                            }
                          },
                          "id": 2412,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3257:21:7",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_PausableStorage_$2306_storage_ptr",
                            "typeString": "struct PausableUpgradeable.PausableStorage storage pointer"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3229:49:7"
                      },
                      {
                        "expression": {
                          "id": 2418,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 2414,
                              "name": "$",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2410,
                              "src": "3288:1:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_PausableStorage_$2306_storage_ptr",
                                "typeString": "struct PausableUpgradeable.PausableStorage storage pointer"
                              }
                            },
                            "id": 2416,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberLocation": "3290:7:7",
                            "memberName": "_paused",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2305,
                            "src": "3288:9:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "74727565",
                            "id": 2417,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3300:4:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "true"
                          },
                          "src": "3288:16:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 2419,
                        "nodeType": "ExpressionStatement",
                        "src": "3288:16:7"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 2421,
                                "name": "_msgSender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2273,
                                "src": "3326:10:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                  "typeString": "function () view returns (address)"
                                }
                              },
                              "id": 2422,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3326:12:7",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 2420,
                            "name": "Paused",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2322,
                            "src": "3319:6:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address)"
                            }
                          },
                          "id": 2423,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3319:20:7",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2424,
                        "nodeType": "EmitStatement",
                        "src": "3314:25:7"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2403,
                    "nodeType": "StructuredDocumentation",
                    "src": "3041:124:7",
                    "text": " @dev Triggers stopped state.\n Requirements:\n - The contract must not be paused."
                  },
                  "id": 2426,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 2406,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 2405,
                        "name": "whenNotPaused",
                        "nameLocations": [
                          "3205:13:7"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 2341,
                        "src": "3205:13:7"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "3205:13:7"
                    }
                  ],
                  "name": "_pause",
                  "nameLocation": "3179:6:7",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2404,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3185:2:7"
                  },
                  "returnParameters": {
                    "id": 2407,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3219:0:7"
                  },
                  "scope": 2451,
                  "src": "3170:176:7",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2449,
                    "nodeType": "Block",
                    "src": "3526:130:7",
                    "statements": [
                      {
                        "assignments": [
                          2434
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2434,
                            "mutability": "mutable",
                            "name": "$",
                            "nameLocation": "3560:1:7",
                            "nodeType": "VariableDeclaration",
                            "scope": 2449,
                            "src": "3536:25:7",
                            "stateVariable": false,
                            "storageLocation": "storage",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_PausableStorage_$2306_storage_ptr",
                              "typeString": "struct PausableUpgradeable.PausableStorage"
                            },
                            "typeName": {
                              "id": 2433,
                              "nodeType": "UserDefinedTypeName",
                              "pathNode": {
                                "id": 2432,
                                "name": "PausableStorage",
                                "nameLocations": [
                                  "3536:15:7"
                                ],
                                "nodeType": "IdentifierPath",
                                "referencedDeclaration": 2306,
                                "src": "3536:15:7"
                              },
                              "referencedDeclaration": 2306,
                              "src": "3536:15:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_PausableStorage_$2306_storage_ptr",
                                "typeString": "struct PausableUpgradeable.PausableStorage"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 2437,
                        "initialValue": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 2435,
                            "name": "_getPausableStorage",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2317,
                            "src": "3564:19:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_PausableStorage_$2306_storage_ptr_$",
                              "typeString": "function () pure returns (struct PausableUpgradeable.PausableStorage storage pointer)"
                            }
                          },
                          "id": 2436,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3564:21:7",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_PausableStorage_$2306_storage_ptr",
                            "typeString": "struct PausableUpgradeable.PausableStorage storage pointer"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3536:49:7"
                      },
                      {
                        "expression": {
                          "id": 2442,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 2438,
                              "name": "$",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2434,
                              "src": "3595:1:7",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_PausableStorage_$2306_storage_ptr",
                                "typeString": "struct PausableUpgradeable.PausableStorage storage pointer"
                              }
                            },
                            "id": 2440,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberLocation": "3597:7:7",
                            "memberName": "_paused",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2305,
                            "src": "3595:9:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "66616c7365",
                            "id": 2441,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3607:5:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "false"
                          },
                          "src": "3595:17:7",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 2443,
                        "nodeType": "ExpressionStatement",
                        "src": "3595:17:7"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 2445,
                                "name": "_msgSender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2273,
                                "src": "3636:10:7",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                  "typeString": "function () view returns (address)"
                                }
                              },
                              "id": 2446,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3636:12:7",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 2444,
                            "name": "Unpaused",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2327,
                            "src": "3627:8:7",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address)"
                            }
                          },
                          "id": 2447,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3627:22:7",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2448,
                        "nodeType": "EmitStatement",
                        "src": "3622:27:7"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2427,
                    "nodeType": "StructuredDocumentation",
                    "src": "3352:121:7",
                    "text": " @dev Returns to normal state.\n Requirements:\n - The contract must be paused."
                  },
                  "id": 2450,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 2430,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 2429,
                        "name": "whenPaused",
                        "nameLocations": [
                          "3515:10:7"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 2349,
                        "src": "3515:10:7"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "3515:10:7"
                    }
                  ],
                  "name": "_unpause",
                  "nameLocation": "3487:8:7",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2428,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3495:2:7"
                  },
                  "returnParameters": {
                    "id": 2431,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3526:0:7"
                  },
                  "scope": 2451,
                  "src": "3478:178:7",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "internal"
                }
              ],
              "scope": 2452,
              "src": "701:2957:7",
              "usedErrors": [
                576,
                579,
                2330,
                2333
              ],
              "usedEvents": [
                584,
                2322,
                2327
              ]
            }
          ],
          "src": "102:3557:7"
        },
        "id": 7
      },
      "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol",
          "exportedSymbols": {
            "ERC165Upgradeable": [
              2491
            ],
            "IERC165": [
              6393
            ],
            "Initializable": [
              827
            ]
          },
          "id": 2492,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 2453,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".20"
              ],
              "nodeType": "PragmaDirective",
              "src": "114:24:8"
            },
            {
              "absolutePath": "@openzeppelin/contracts/utils/introspection/IERC165.sol",
              "file": "@openzeppelin/contracts/utils/introspection/IERC165.sol",
              "id": 2455,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 2492,
              "sourceUnit": 6394,
              "src": "140:80:8",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 2454,
                    "name": "IERC165",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 6393,
                    "src": "148:7:8",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol",
              "file": "../../proxy/utils/Initializable.sol",
              "id": 2457,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 2492,
              "sourceUnit": 828,
              "src": "221:66:8",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 2456,
                    "name": "Initializable",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 827,
                    "src": "229:13:8",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "abstract": true,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 2459,
                    "name": "Initializable",
                    "nameLocations": [
                      "808:13:8"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 827,
                    "src": "808:13:8"
                  },
                  "id": 2460,
                  "nodeType": "InheritanceSpecifier",
                  "src": "808:13:8"
                },
                {
                  "baseName": {
                    "id": 2461,
                    "name": "IERC165",
                    "nameLocations": [
                      "823:7:8"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 6393,
                    "src": "823:7:8"
                  },
                  "id": 2462,
                  "nodeType": "InheritanceSpecifier",
                  "src": "823:7:8"
                }
              ],
              "canonicalName": "ERC165Upgradeable",
              "contractDependencies": [],
              "contractKind": "contract",
              "documentation": {
                "id": 2458,
                "nodeType": "StructuredDocumentation",
                "src": "289:479:8",
                "text": " @dev Implementation of the {IERC165} interface.\n Contracts that want to implement ERC-165 should inherit from this contract and override {supportsInterface} to check\n for the additional interface id that will be supported. For example:\n ```solidity\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\n }\n ```"
              },
              "fullyImplemented": true,
              "id": 2491,
              "linearizedBaseContracts": [
                2491,
                6393,
                827
              ],
              "name": "ERC165Upgradeable",
              "nameLocation": "787:17:8",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 2467,
                    "nodeType": "Block",
                    "src": "888:7:8",
                    "statements": []
                  },
                  "id": 2468,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 2465,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 2464,
                        "name": "onlyInitializing",
                        "nameLocations": [
                          "871:16:8"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 722,
                        "src": "871:16:8"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "871:16:8"
                    }
                  ],
                  "name": "__ERC165_init",
                  "nameLocation": "846:13:8",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2463,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "859:2:8"
                  },
                  "returnParameters": {
                    "id": 2466,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "888:0:8"
                  },
                  "scope": 2491,
                  "src": "837:58:8",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2473,
                    "nodeType": "Block",
                    "src": "962:7:8",
                    "statements": []
                  },
                  "id": 2474,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 2471,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 2470,
                        "name": "onlyInitializing",
                        "nameLocations": [
                          "945:16:8"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 722,
                        "src": "945:16:8"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "945:16:8"
                    }
                  ],
                  "name": "__ERC165_init_unchained",
                  "nameLocation": "910:23:8",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2469,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "933:2:8"
                  },
                  "returnParameters": {
                    "id": 2472,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "962:0:8"
                  },
                  "scope": 2491,
                  "src": "901:68:8",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "baseFunctions": [
                    6392
                  ],
                  "body": {
                    "id": 2489,
                    "nodeType": "Block",
                    "src": "1084:64:8",
                    "statements": [
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          },
                          "id": 2487,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 2482,
                            "name": "interfaceId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2477,
                            "src": "1101:11:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 2484,
                                  "name": "IERC165",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6393,
                                  "src": "1121:7:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_IERC165_$6393_$",
                                    "typeString": "type(contract IERC165)"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_contract$_IERC165_$6393_$",
                                    "typeString": "type(contract IERC165)"
                                  }
                                ],
                                "id": 2483,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -27,
                                "src": "1116:4:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 2485,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1116:13:8",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_contract$_IERC165_$6393",
                                "typeString": "type(contract IERC165)"
                              }
                            },
                            "id": 2486,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberLocation": "1130:11:8",
                            "memberName": "interfaceId",
                            "nodeType": "MemberAccess",
                            "src": "1116:25:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "src": "1101:40:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 2481,
                        "id": 2488,
                        "nodeType": "Return",
                        "src": "1094:47:8"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2475,
                    "nodeType": "StructuredDocumentation",
                    "src": "974:23:8",
                    "text": "@inheritdoc IERC165"
                  },
                  "functionSelector": "01ffc9a7",
                  "id": 2490,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "supportsInterface",
                  "nameLocation": "1011:17:8",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2478,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2477,
                        "mutability": "mutable",
                        "name": "interfaceId",
                        "nameLocation": "1036:11:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 2490,
                        "src": "1029:18:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "typeName": {
                          "id": 2476,
                          "name": "bytes4",
                          "nodeType": "ElementaryTypeName",
                          "src": "1029:6:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1028:20:8"
                  },
                  "returnParameters": {
                    "id": 2481,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2480,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2490,
                        "src": "1078:4:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2479,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "1078:4:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1077:6:8"
                  },
                  "scope": 2491,
                  "src": "1002:146:8",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                }
              ],
              "scope": 2492,
              "src": "769:381:8",
              "usedErrors": [
                576,
                579
              ],
              "usedEvents": [
                584
              ]
            }
          ],
          "src": "114:1037:8"
        },
        "id": 8
      },
      "@openzeppelin/contracts/access/IAccessControl.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/access/IAccessControl.sol",
          "exportedSymbols": {
            "IAccessControl": [
              2574
            ]
          },
          "id": 2575,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 2493,
              "literals": [
                "solidity",
                ">=",
                "0.8",
                ".4"
              ],
              "nodeType": "PragmaDirective",
              "src": "109:24:9"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "canonicalName": "IAccessControl",
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 2494,
                "nodeType": "StructuredDocumentation",
                "src": "135:90:9",
                "text": " @dev External interface of AccessControl declared to support ERC-165 detection."
              },
              "fullyImplemented": false,
              "id": 2574,
              "linearizedBaseContracts": [
                2574
              ],
              "name": "IAccessControl",
              "nameLocation": "236:14:9",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "documentation": {
                    "id": 2495,
                    "nodeType": "StructuredDocumentation",
                    "src": "257:56:9",
                    "text": " @dev The `account` is missing a role."
                  },
                  "errorSelector": "e2517d3f",
                  "id": 2501,
                  "name": "AccessControlUnauthorizedAccount",
                  "nameLocation": "324:32:9",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 2500,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2497,
                        "mutability": "mutable",
                        "name": "account",
                        "nameLocation": "365:7:9",
                        "nodeType": "VariableDeclaration",
                        "scope": 2501,
                        "src": "357:15:9",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2496,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "357:7:9",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2499,
                        "mutability": "mutable",
                        "name": "neededRole",
                        "nameLocation": "382:10:9",
                        "nodeType": "VariableDeclaration",
                        "scope": 2501,
                        "src": "374:18:9",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 2498,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "374:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "356:37:9"
                  },
                  "src": "318:76:9"
                },
                {
                  "documentation": {
                    "id": 2502,
                    "nodeType": "StructuredDocumentation",
                    "src": "400:148:9",
                    "text": " @dev The caller of a function is not the expected one.\n NOTE: Don't confuse with {AccessControlUnauthorizedAccount}."
                  },
                  "errorSelector": "6697b232",
                  "id": 2504,
                  "name": "AccessControlBadConfirmation",
                  "nameLocation": "559:28:9",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 2503,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "587:2:9"
                  },
                  "src": "553:37:9"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2505,
                    "nodeType": "StructuredDocumentation",
                    "src": "596:254:9",
                    "text": " @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\n `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\n {RoleAdminChanged} not being emitted to signal this."
                  },
                  "eventSelector": "bd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff",
                  "id": 2513,
                  "name": "RoleAdminChanged",
                  "nameLocation": "861:16:9",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2512,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2507,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "role",
                        "nameLocation": "894:4:9",
                        "nodeType": "VariableDeclaration",
                        "scope": 2513,
                        "src": "878:20:9",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 2506,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "878:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2509,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "previousAdminRole",
                        "nameLocation": "916:17:9",
                        "nodeType": "VariableDeclaration",
                        "scope": 2513,
                        "src": "900:33:9",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 2508,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "900:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2511,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "newAdminRole",
                        "nameLocation": "951:12:9",
                        "nodeType": "VariableDeclaration",
                        "scope": 2513,
                        "src": "935:28:9",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 2510,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "935:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "877:87:9"
                  },
                  "src": "855:110:9"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2514,
                    "nodeType": "StructuredDocumentation",
                    "src": "971:295:9",
                    "text": " @dev Emitted when `account` is granted `role`.\n `sender` is the account that originated the contract call. This account bears the admin role (for the granted role).\n Expected in cases where the role was granted using the internal {AccessControl-_grantRole}."
                  },
                  "eventSelector": "2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d",
                  "id": 2522,
                  "name": "RoleGranted",
                  "nameLocation": "1277:11:9",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2521,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2516,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "role",
                        "nameLocation": "1305:4:9",
                        "nodeType": "VariableDeclaration",
                        "scope": 2522,
                        "src": "1289:20:9",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 2515,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "1289:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2518,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "account",
                        "nameLocation": "1327:7:9",
                        "nodeType": "VariableDeclaration",
                        "scope": 2522,
                        "src": "1311:23:9",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2517,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1311:7:9",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2520,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "sender",
                        "nameLocation": "1352:6:9",
                        "nodeType": "VariableDeclaration",
                        "scope": 2522,
                        "src": "1336:22:9",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2519,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1336:7:9",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1288:71:9"
                  },
                  "src": "1271:89:9"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2523,
                    "nodeType": "StructuredDocumentation",
                    "src": "1366:275:9",
                    "text": " @dev Emitted when `account` is revoked `role`.\n `sender` is the account that originated the contract call:\n   - if using `revokeRole`, it is the admin role bearer\n   - if using `renounceRole`, it is the role bearer (i.e. `account`)"
                  },
                  "eventSelector": "f6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b",
                  "id": 2531,
                  "name": "RoleRevoked",
                  "nameLocation": "1652:11:9",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2530,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2525,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "role",
                        "nameLocation": "1680:4:9",
                        "nodeType": "VariableDeclaration",
                        "scope": 2531,
                        "src": "1664:20:9",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 2524,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "1664:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2527,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "account",
                        "nameLocation": "1702:7:9",
                        "nodeType": "VariableDeclaration",
                        "scope": 2531,
                        "src": "1686:23:9",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2526,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1686:7:9",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2529,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "sender",
                        "nameLocation": "1727:6:9",
                        "nodeType": "VariableDeclaration",
                        "scope": 2531,
                        "src": "1711:22:9",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2528,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1711:7:9",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1663:71:9"
                  },
                  "src": "1646:89:9"
                },
                {
                  "documentation": {
                    "id": 2532,
                    "nodeType": "StructuredDocumentation",
                    "src": "1741:76:9",
                    "text": " @dev Returns `true` if `account` has been granted `role`."
                  },
                  "functionSelector": "91d14854",
                  "id": 2541,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "hasRole",
                  "nameLocation": "1831:7:9",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2537,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2534,
                        "mutability": "mutable",
                        "name": "role",
                        "nameLocation": "1847:4:9",
                        "nodeType": "VariableDeclaration",
                        "scope": 2541,
                        "src": "1839:12:9",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 2533,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "1839:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2536,
                        "mutability": "mutable",
                        "name": "account",
                        "nameLocation": "1861:7:9",
                        "nodeType": "VariableDeclaration",
                        "scope": 2541,
                        "src": "1853:15:9",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2535,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1853:7:9",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1838:31:9"
                  },
                  "returnParameters": {
                    "id": 2540,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2539,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2541,
                        "src": "1893:4:9",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 2538,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "1893:4:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1892:6:9"
                  },
                  "scope": 2574,
                  "src": "1822:77:9",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 2542,
                    "nodeType": "StructuredDocumentation",
                    "src": "1905:184:9",
                    "text": " @dev Returns the admin role that controls `role`. See {grantRole} and\n {revokeRole}.\n To change a role's admin, use {AccessControl-_setRoleAdmin}."
                  },
                  "functionSelector": "248a9ca3",
                  "id": 2549,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getRoleAdmin",
                  "nameLocation": "2103:12:9",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2545,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2544,
                        "mutability": "mutable",
                        "name": "role",
                        "nameLocation": "2124:4:9",
                        "nodeType": "VariableDeclaration",
                        "scope": 2549,
                        "src": "2116:12:9",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 2543,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2116:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2115:14:9"
                  },
                  "returnParameters": {
                    "id": 2548,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2547,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2549,
                        "src": "2153:7:9",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 2546,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2153:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2152:9:9"
                  },
                  "scope": 2574,
                  "src": "2094:68:9",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 2550,
                    "nodeType": "StructuredDocumentation",
                    "src": "2168:239:9",
                    "text": " @dev Grants `role` to `account`.\n If `account` had not been already granted `role`, emits a {RoleGranted}\n event.\n Requirements:\n - the caller must have ``role``'s admin role."
                  },
                  "functionSelector": "2f2ff15d",
                  "id": 2557,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "grantRole",
                  "nameLocation": "2421:9:9",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2555,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2552,
                        "mutability": "mutable",
                        "name": "role",
                        "nameLocation": "2439:4:9",
                        "nodeType": "VariableDeclaration",
                        "scope": 2557,
                        "src": "2431:12:9",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 2551,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2431:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2554,
                        "mutability": "mutable",
                        "name": "account",
                        "nameLocation": "2453:7:9",
                        "nodeType": "VariableDeclaration",
                        "scope": 2557,
                        "src": "2445:15:9",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2553,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2445:7:9",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2430:31:9"
                  },
                  "returnParameters": {
                    "id": 2556,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2470:0:9"
                  },
                  "scope": 2574,
                  "src": "2412:59:9",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 2558,
                    "nodeType": "StructuredDocumentation",
                    "src": "2477:223:9",
                    "text": " @dev Revokes `role` from `account`.\n If `account` had been granted `role`, emits a {RoleRevoked} event.\n Requirements:\n - the caller must have ``role``'s admin role."
                  },
                  "functionSelector": "d547741f",
                  "id": 2565,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "revokeRole",
                  "nameLocation": "2714:10:9",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2563,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2560,
                        "mutability": "mutable",
                        "name": "role",
                        "nameLocation": "2733:4:9",
                        "nodeType": "VariableDeclaration",
                        "scope": 2565,
                        "src": "2725:12:9",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 2559,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2725:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2562,
                        "mutability": "mutable",
                        "name": "account",
                        "nameLocation": "2747:7:9",
                        "nodeType": "VariableDeclaration",
                        "scope": 2565,
                        "src": "2739:15:9",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2561,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2739:7:9",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2724:31:9"
                  },
                  "returnParameters": {
                    "id": 2564,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2764:0:9"
                  },
                  "scope": 2574,
                  "src": "2705:60:9",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 2566,
                    "nodeType": "StructuredDocumentation",
                    "src": "2771:491:9",
                    "text": " @dev Revokes `role` from the calling account.\n Roles are often managed via {grantRole} and {revokeRole}: this function's\n purpose is to provide a mechanism for accounts to lose their privileges\n if they are compromised (such as when a trusted device is misplaced).\n If the calling account had been granted `role`, emits a {RoleRevoked}\n event.\n Requirements:\n - the caller must be `callerConfirmation`."
                  },
                  "functionSelector": "36568abe",
                  "id": 2573,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "renounceRole",
                  "nameLocation": "3276:12:9",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2571,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2568,
                        "mutability": "mutable",
                        "name": "role",
                        "nameLocation": "3297:4:9",
                        "nodeType": "VariableDeclaration",
                        "scope": 2573,
                        "src": "3289:12:9",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 2567,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "3289:7:9",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2570,
                        "mutability": "mutable",
                        "name": "callerConfirmation",
                        "nameLocation": "3311:18:9",
                        "nodeType": "VariableDeclaration",
                        "scope": 2573,
                        "src": "3303:26:9",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2569,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3303:7:9",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3288:42:9"
                  },
                  "returnParameters": {
                    "id": 2572,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3339:0:9"
                  },
                  "scope": 2574,
                  "src": "3267:73:9",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 2575,
              "src": "226:3116:9",
              "usedErrors": [
                2501,
                2504
              ],
              "usedEvents": [
                2513,
                2522,
                2531
              ]
            }
          ],
          "src": "109:3234:9"
        },
        "id": 9
      },
      "@openzeppelin/contracts/interfaces/IERC1967.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/interfaces/IERC1967.sol",
          "exportedSymbols": {
            "IERC1967": [
              2595
            ]
          },
          "id": 2596,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 2576,
              "literals": [
                "solidity",
                ">=",
                "0.4",
                ".11"
              ],
              "nodeType": "PragmaDirective",
              "src": "107:25:10"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "canonicalName": "IERC1967",
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 2577,
                "nodeType": "StructuredDocumentation",
                "src": "134:101:10",
                "text": " @dev ERC-1967: Proxy Storage Slots. This interface contains the events defined in the ERC."
              },
              "fullyImplemented": true,
              "id": 2595,
              "linearizedBaseContracts": [
                2595
              ],
              "name": "IERC1967",
              "nameLocation": "246:8:10",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2578,
                    "nodeType": "StructuredDocumentation",
                    "src": "261:68:10",
                    "text": " @dev Emitted when the implementation is upgraded."
                  },
                  "eventSelector": "bc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b",
                  "id": 2582,
                  "name": "Upgraded",
                  "nameLocation": "340:8:10",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2581,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2580,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "implementation",
                        "nameLocation": "365:14:10",
                        "nodeType": "VariableDeclaration",
                        "scope": 2582,
                        "src": "349:30:10",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2579,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "349:7:10",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "348:32:10"
                  },
                  "src": "334:47:10"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2583,
                    "nodeType": "StructuredDocumentation",
                    "src": "387:67:10",
                    "text": " @dev Emitted when the admin account has changed."
                  },
                  "eventSelector": "7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f",
                  "id": 2589,
                  "name": "AdminChanged",
                  "nameLocation": "465:12:10",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2588,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2585,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "previousAdmin",
                        "nameLocation": "486:13:10",
                        "nodeType": "VariableDeclaration",
                        "scope": 2589,
                        "src": "478:21:10",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2584,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "478:7:10",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2587,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "newAdmin",
                        "nameLocation": "509:8:10",
                        "nodeType": "VariableDeclaration",
                        "scope": 2589,
                        "src": "501:16:10",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2586,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "501:7:10",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "477:41:10"
                  },
                  "src": "459:60:10"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 2590,
                    "nodeType": "StructuredDocumentation",
                    "src": "525:59:10",
                    "text": " @dev Emitted when the beacon is changed."
                  },
                  "eventSelector": "1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e",
                  "id": 2594,
                  "name": "BeaconUpgraded",
                  "nameLocation": "595:14:10",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 2593,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2592,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "beacon",
                        "nameLocation": "626:6:10",
                        "nodeType": "VariableDeclaration",
                        "scope": 2594,
                        "src": "610:22:10",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2591,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "610:7:10",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "609:24:10"
                  },
                  "src": "589:45:10"
                }
              ],
              "scope": 2596,
              "src": "236:400:10",
              "usedErrors": [],
              "usedEvents": [
                2582,
                2589,
                2594
              ]
            }
          ],
          "src": "107:530:10"
        },
        "id": 10
      },
      "@openzeppelin/contracts/interfaces/draft-IERC1822.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/interfaces/draft-IERC1822.sol",
          "exportedSymbols": {
            "IERC1822Proxiable": [
              2605
            ]
          },
          "id": 2606,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 2597,
              "literals": [
                "solidity",
                ">=",
                "0.4",
                ".16"
              ],
              "nodeType": "PragmaDirective",
              "src": "113:25:11"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "canonicalName": "IERC1822Proxiable",
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 2598,
                "nodeType": "StructuredDocumentation",
                "src": "140:204:11",
                "text": " @dev ERC-1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\n proxy whose upgrades are fully controlled by the current implementation."
              },
              "fullyImplemented": false,
              "id": 2605,
              "linearizedBaseContracts": [
                2605
              ],
              "name": "IERC1822Proxiable",
              "nameLocation": "355:17:11",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "documentation": {
                    "id": 2599,
                    "nodeType": "StructuredDocumentation",
                    "src": "379:438:11",
                    "text": " @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\n address.\n IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\n bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\n function revert if invoked through a proxy."
                  },
                  "functionSelector": "52d1902d",
                  "id": 2604,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "proxiableUUID",
                  "nameLocation": "831:13:11",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2600,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "844:2:11"
                  },
                  "returnParameters": {
                    "id": 2603,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2602,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2604,
                        "src": "870:7:11",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 2601,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "870:7:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "869:9:11"
                  },
                  "scope": 2605,
                  "src": "822:57:11",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 2606,
              "src": "345:536:11",
              "usedErrors": [],
              "usedEvents": []
            }
          ],
          "src": "113:769:11"
        },
        "id": 11
      },
      "@openzeppelin/contracts/interfaces/draft-IERC6093.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/interfaces/draft-IERC6093.sol",
          "exportedSymbols": {
            "IERC1155Errors": [
              2742
            ],
            "IERC20Errors": [
              2647
            ],
            "IERC721Errors": [
              2695
            ]
          },
          "id": 2743,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 2607,
              "literals": [
                "solidity",
                ">=",
                "0.8",
                ".4"
              ],
              "nodeType": "PragmaDirective",
              "src": "112:24:12"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "canonicalName": "IERC20Errors",
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 2608,
                "nodeType": "StructuredDocumentation",
                "src": "138:141:12",
                "text": " @dev Standard ERC-20 Errors\n Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens."
              },
              "fullyImplemented": true,
              "id": 2647,
              "linearizedBaseContracts": [
                2647
              ],
              "name": "IERC20Errors",
              "nameLocation": "290:12:12",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "documentation": {
                    "id": 2609,
                    "nodeType": "StructuredDocumentation",
                    "src": "309:309:12",
                    "text": " @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\n @param sender Address whose tokens are being transferred.\n @param balance Current balance for the interacting account.\n @param needed Minimum amount required to perform a transfer."
                  },
                  "errorSelector": "e450d38c",
                  "id": 2617,
                  "name": "ERC20InsufficientBalance",
                  "nameLocation": "629:24:12",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 2616,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2611,
                        "mutability": "mutable",
                        "name": "sender",
                        "nameLocation": "662:6:12",
                        "nodeType": "VariableDeclaration",
                        "scope": 2617,
                        "src": "654:14:12",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2610,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "654:7:12",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2613,
                        "mutability": "mutable",
                        "name": "balance",
                        "nameLocation": "678:7:12",
                        "nodeType": "VariableDeclaration",
                        "scope": 2617,
                        "src": "670:15:12",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2612,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "670:7:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2615,
                        "mutability": "mutable",
                        "name": "needed",
                        "nameLocation": "695:6:12",
                        "nodeType": "VariableDeclaration",
                        "scope": 2617,
                        "src": "687:14:12",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2614,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "687:7:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "653:49:12"
                  },
                  "src": "623:80:12"
                },
                {
                  "documentation": {
                    "id": 2618,
                    "nodeType": "StructuredDocumentation",
                    "src": "709:152:12",
                    "text": " @dev Indicates a failure with the token `sender`. Used in transfers.\n @param sender Address whose tokens are being transferred."
                  },
                  "errorSelector": "96c6fd1e",
                  "id": 2622,
                  "name": "ERC20InvalidSender",
                  "nameLocation": "872:18:12",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 2621,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2620,
                        "mutability": "mutable",
                        "name": "sender",
                        "nameLocation": "899:6:12",
                        "nodeType": "VariableDeclaration",
                        "scope": 2622,
                        "src": "891:14:12",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2619,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "891:7:12",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "890:16:12"
                  },
                  "src": "866:41:12"
                },
                {
                  "documentation": {
                    "id": 2623,
                    "nodeType": "StructuredDocumentation",
                    "src": "913:159:12",
                    "text": " @dev Indicates a failure with the token `receiver`. Used in transfers.\n @param receiver Address to which tokens are being transferred."
                  },
                  "errorSelector": "ec442f05",
                  "id": 2627,
                  "name": "ERC20InvalidReceiver",
                  "nameLocation": "1083:20:12",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 2626,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2625,
                        "mutability": "mutable",
                        "name": "receiver",
                        "nameLocation": "1112:8:12",
                        "nodeType": "VariableDeclaration",
                        "scope": 2627,
                        "src": "1104:16:12",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2624,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1104:7:12",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1103:18:12"
                  },
                  "src": "1077:45:12"
                },
                {
                  "documentation": {
                    "id": 2628,
                    "nodeType": "StructuredDocumentation",
                    "src": "1128:345:12",
                    "text": " @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers.\n @param spender Address that may be allowed to operate on tokens without being their owner.\n @param allowance Amount of tokens a `spender` is allowed to operate with.\n @param needed Minimum amount required to perform a transfer."
                  },
                  "errorSelector": "fb8f41b2",
                  "id": 2636,
                  "name": "ERC20InsufficientAllowance",
                  "nameLocation": "1484:26:12",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 2635,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2630,
                        "mutability": "mutable",
                        "name": "spender",
                        "nameLocation": "1519:7:12",
                        "nodeType": "VariableDeclaration",
                        "scope": 2636,
                        "src": "1511:15:12",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2629,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1511:7:12",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2632,
                        "mutability": "mutable",
                        "name": "allowance",
                        "nameLocation": "1536:9:12",
                        "nodeType": "VariableDeclaration",
                        "scope": 2636,
                        "src": "1528:17:12",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2631,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1528:7:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2634,
                        "mutability": "mutable",
                        "name": "needed",
                        "nameLocation": "1555:6:12",
                        "nodeType": "VariableDeclaration",
                        "scope": 2636,
                        "src": "1547:14:12",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2633,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1547:7:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1510:52:12"
                  },
                  "src": "1478:85:12"
                },
                {
                  "documentation": {
                    "id": 2637,
                    "nodeType": "StructuredDocumentation",
                    "src": "1569:174:12",
                    "text": " @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n @param approver Address initiating an approval operation."
                  },
                  "errorSelector": "e602df05",
                  "id": 2641,
                  "name": "ERC20InvalidApprover",
                  "nameLocation": "1754:20:12",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 2640,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2639,
                        "mutability": "mutable",
                        "name": "approver",
                        "nameLocation": "1783:8:12",
                        "nodeType": "VariableDeclaration",
                        "scope": 2641,
                        "src": "1775:16:12",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2638,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1775:7:12",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1774:18:12"
                  },
                  "src": "1748:45:12"
                },
                {
                  "documentation": {
                    "id": 2642,
                    "nodeType": "StructuredDocumentation",
                    "src": "1799:195:12",
                    "text": " @dev Indicates a failure with the `spender` to be approved. Used in approvals.\n @param spender Address that may be allowed to operate on tokens without being their owner."
                  },
                  "errorSelector": "94280d62",
                  "id": 2646,
                  "name": "ERC20InvalidSpender",
                  "nameLocation": "2005:19:12",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 2645,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2644,
                        "mutability": "mutable",
                        "name": "spender",
                        "nameLocation": "2033:7:12",
                        "nodeType": "VariableDeclaration",
                        "scope": 2646,
                        "src": "2025:15:12",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2643,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2025:7:12",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2024:17:12"
                  },
                  "src": "1999:43:12"
                }
              ],
              "scope": 2743,
              "src": "280:1764:12",
              "usedErrors": [
                2617,
                2622,
                2627,
                2636,
                2641,
                2646
              ],
              "usedEvents": []
            },
            {
              "abstract": false,
              "baseContracts": [],
              "canonicalName": "IERC721Errors",
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 2648,
                "nodeType": "StructuredDocumentation",
                "src": "2046:143:12",
                "text": " @dev Standard ERC-721 Errors\n Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens."
              },
              "fullyImplemented": true,
              "id": 2695,
              "linearizedBaseContracts": [
                2695
              ],
              "name": "IERC721Errors",
              "nameLocation": "2200:13:12",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "documentation": {
                    "id": 2649,
                    "nodeType": "StructuredDocumentation",
                    "src": "2220:219:12",
                    "text": " @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-20.\n Used in balance queries.\n @param owner Address of the current owner of a token."
                  },
                  "errorSelector": "89c62b64",
                  "id": 2653,
                  "name": "ERC721InvalidOwner",
                  "nameLocation": "2450:18:12",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 2652,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2651,
                        "mutability": "mutable",
                        "name": "owner",
                        "nameLocation": "2477:5:12",
                        "nodeType": "VariableDeclaration",
                        "scope": 2653,
                        "src": "2469:13:12",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2650,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2469:7:12",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2468:15:12"
                  },
                  "src": "2444:40:12"
                },
                {
                  "documentation": {
                    "id": 2654,
                    "nodeType": "StructuredDocumentation",
                    "src": "2490:132:12",
                    "text": " @dev Indicates a `tokenId` whose `owner` is the zero address.\n @param tokenId Identifier number of a token."
                  },
                  "errorSelector": "7e273289",
                  "id": 2658,
                  "name": "ERC721NonexistentToken",
                  "nameLocation": "2633:22:12",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 2657,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2656,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "2664:7:12",
                        "nodeType": "VariableDeclaration",
                        "scope": 2658,
                        "src": "2656:15:12",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2655,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2656:7:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2655:17:12"
                  },
                  "src": "2627:46:12"
                },
                {
                  "documentation": {
                    "id": 2659,
                    "nodeType": "StructuredDocumentation",
                    "src": "2679:289:12",
                    "text": " @dev Indicates an error related to the ownership over a particular token. Used in transfers.\n @param sender Address whose tokens are being transferred.\n @param tokenId Identifier number of a token.\n @param owner Address of the current owner of a token."
                  },
                  "errorSelector": "64283d7b",
                  "id": 2667,
                  "name": "ERC721IncorrectOwner",
                  "nameLocation": "2979:20:12",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 2666,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2661,
                        "mutability": "mutable",
                        "name": "sender",
                        "nameLocation": "3008:6:12",
                        "nodeType": "VariableDeclaration",
                        "scope": 2667,
                        "src": "3000:14:12",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2660,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3000:7:12",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2663,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "3024:7:12",
                        "nodeType": "VariableDeclaration",
                        "scope": 2667,
                        "src": "3016:15:12",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2662,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3016:7:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2665,
                        "mutability": "mutable",
                        "name": "owner",
                        "nameLocation": "3041:5:12",
                        "nodeType": "VariableDeclaration",
                        "scope": 2667,
                        "src": "3033:13:12",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2664,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3033:7:12",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2999:48:12"
                  },
                  "src": "2973:75:12"
                },
                {
                  "documentation": {
                    "id": 2668,
                    "nodeType": "StructuredDocumentation",
                    "src": "3054:152:12",
                    "text": " @dev Indicates a failure with the token `sender`. Used in transfers.\n @param sender Address whose tokens are being transferred."
                  },
                  "errorSelector": "73c6ac6e",
                  "id": 2672,
                  "name": "ERC721InvalidSender",
                  "nameLocation": "3217:19:12",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 2671,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2670,
                        "mutability": "mutable",
                        "name": "sender",
                        "nameLocation": "3245:6:12",
                        "nodeType": "VariableDeclaration",
                        "scope": 2672,
                        "src": "3237:14:12",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2669,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3237:7:12",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3236:16:12"
                  },
                  "src": "3211:42:12"
                },
                {
                  "documentation": {
                    "id": 2673,
                    "nodeType": "StructuredDocumentation",
                    "src": "3259:159:12",
                    "text": " @dev Indicates a failure with the token `receiver`. Used in transfers.\n @param receiver Address to which tokens are being transferred."
                  },
                  "errorSelector": "64a0ae92",
                  "id": 2677,
                  "name": "ERC721InvalidReceiver",
                  "nameLocation": "3429:21:12",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 2676,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2675,
                        "mutability": "mutable",
                        "name": "receiver",
                        "nameLocation": "3459:8:12",
                        "nodeType": "VariableDeclaration",
                        "scope": 2677,
                        "src": "3451:16:12",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2674,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3451:7:12",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3450:18:12"
                  },
                  "src": "3423:46:12"
                },
                {
                  "documentation": {
                    "id": 2678,
                    "nodeType": "StructuredDocumentation",
                    "src": "3475:247:12",
                    "text": " @dev Indicates a failure with the `operator`’s approval. Used in transfers.\n @param operator Address that may be allowed to operate on tokens without being their owner.\n @param tokenId Identifier number of a token."
                  },
                  "errorSelector": "177e802f",
                  "id": 2684,
                  "name": "ERC721InsufficientApproval",
                  "nameLocation": "3733:26:12",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 2683,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2680,
                        "mutability": "mutable",
                        "name": "operator",
                        "nameLocation": "3768:8:12",
                        "nodeType": "VariableDeclaration",
                        "scope": 2684,
                        "src": "3760:16:12",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2679,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3760:7:12",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2682,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "3786:7:12",
                        "nodeType": "VariableDeclaration",
                        "scope": 2684,
                        "src": "3778:15:12",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2681,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3778:7:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3759:35:12"
                  },
                  "src": "3727:68:12"
                },
                {
                  "documentation": {
                    "id": 2685,
                    "nodeType": "StructuredDocumentation",
                    "src": "3801:174:12",
                    "text": " @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n @param approver Address initiating an approval operation."
                  },
                  "errorSelector": "a9fbf51f",
                  "id": 2689,
                  "name": "ERC721InvalidApprover",
                  "nameLocation": "3986:21:12",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 2688,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2687,
                        "mutability": "mutable",
                        "name": "approver",
                        "nameLocation": "4016:8:12",
                        "nodeType": "VariableDeclaration",
                        "scope": 2689,
                        "src": "4008:16:12",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2686,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4008:7:12",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4007:18:12"
                  },
                  "src": "3980:46:12"
                },
                {
                  "documentation": {
                    "id": 2690,
                    "nodeType": "StructuredDocumentation",
                    "src": "4032:197:12",
                    "text": " @dev Indicates a failure with the `operator` to be approved. Used in approvals.\n @param operator Address that may be allowed to operate on tokens without being their owner."
                  },
                  "errorSelector": "5b08ba18",
                  "id": 2694,
                  "name": "ERC721InvalidOperator",
                  "nameLocation": "4240:21:12",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 2693,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2692,
                        "mutability": "mutable",
                        "name": "operator",
                        "nameLocation": "4270:8:12",
                        "nodeType": "VariableDeclaration",
                        "scope": 2694,
                        "src": "4262:16:12",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2691,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4262:7:12",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4261:18:12"
                  },
                  "src": "4234:46:12"
                }
              ],
              "scope": 2743,
              "src": "2190:2092:12",
              "usedErrors": [
                2653,
                2658,
                2667,
                2672,
                2677,
                2684,
                2689,
                2694
              ],
              "usedEvents": []
            },
            {
              "abstract": false,
              "baseContracts": [],
              "canonicalName": "IERC1155Errors",
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 2696,
                "nodeType": "StructuredDocumentation",
                "src": "4284:145:12",
                "text": " @dev Standard ERC-1155 Errors\n Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 tokens."
              },
              "fullyImplemented": true,
              "id": 2742,
              "linearizedBaseContracts": [
                2742
              ],
              "name": "IERC1155Errors",
              "nameLocation": "4440:14:12",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "documentation": {
                    "id": 2697,
                    "nodeType": "StructuredDocumentation",
                    "src": "4461:361:12",
                    "text": " @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\n @param sender Address whose tokens are being transferred.\n @param balance Current balance for the interacting account.\n @param needed Minimum amount required to perform a transfer.\n @param tokenId Identifier number of a token."
                  },
                  "errorSelector": "03dee4c5",
                  "id": 2707,
                  "name": "ERC1155InsufficientBalance",
                  "nameLocation": "4833:26:12",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 2706,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2699,
                        "mutability": "mutable",
                        "name": "sender",
                        "nameLocation": "4868:6:12",
                        "nodeType": "VariableDeclaration",
                        "scope": 2707,
                        "src": "4860:14:12",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2698,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4860:7:12",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2701,
                        "mutability": "mutable",
                        "name": "balance",
                        "nameLocation": "4884:7:12",
                        "nodeType": "VariableDeclaration",
                        "scope": 2707,
                        "src": "4876:15:12",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2700,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4876:7:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2703,
                        "mutability": "mutable",
                        "name": "needed",
                        "nameLocation": "4901:6:12",
                        "nodeType": "VariableDeclaration",
                        "scope": 2707,
                        "src": "4893:14:12",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2702,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4893:7:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2705,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "4917:7:12",
                        "nodeType": "VariableDeclaration",
                        "scope": 2707,
                        "src": "4909:15:12",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2704,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4909:7:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4859:66:12"
                  },
                  "src": "4827:99:12"
                },
                {
                  "documentation": {
                    "id": 2708,
                    "nodeType": "StructuredDocumentation",
                    "src": "4932:152:12",
                    "text": " @dev Indicates a failure with the token `sender`. Used in transfers.\n @param sender Address whose tokens are being transferred."
                  },
                  "errorSelector": "01a83514",
                  "id": 2712,
                  "name": "ERC1155InvalidSender",
                  "nameLocation": "5095:20:12",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 2711,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2710,
                        "mutability": "mutable",
                        "name": "sender",
                        "nameLocation": "5124:6:12",
                        "nodeType": "VariableDeclaration",
                        "scope": 2712,
                        "src": "5116:14:12",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2709,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5116:7:12",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5115:16:12"
                  },
                  "src": "5089:43:12"
                },
                {
                  "documentation": {
                    "id": 2713,
                    "nodeType": "StructuredDocumentation",
                    "src": "5138:159:12",
                    "text": " @dev Indicates a failure with the token `receiver`. Used in transfers.\n @param receiver Address to which tokens are being transferred."
                  },
                  "errorSelector": "57f447ce",
                  "id": 2717,
                  "name": "ERC1155InvalidReceiver",
                  "nameLocation": "5308:22:12",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 2716,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2715,
                        "mutability": "mutable",
                        "name": "receiver",
                        "nameLocation": "5339:8:12",
                        "nodeType": "VariableDeclaration",
                        "scope": 2717,
                        "src": "5331:16:12",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2714,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5331:7:12",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5330:18:12"
                  },
                  "src": "5302:47:12"
                },
                {
                  "documentation": {
                    "id": 2718,
                    "nodeType": "StructuredDocumentation",
                    "src": "5355:256:12",
                    "text": " @dev Indicates a failure with the `operator`’s approval. Used in transfers.\n @param operator Address that may be allowed to operate on tokens without being their owner.\n @param owner Address of the current owner of a token."
                  },
                  "errorSelector": "e237d922",
                  "id": 2724,
                  "name": "ERC1155MissingApprovalForAll",
                  "nameLocation": "5622:28:12",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 2723,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2720,
                        "mutability": "mutable",
                        "name": "operator",
                        "nameLocation": "5659:8:12",
                        "nodeType": "VariableDeclaration",
                        "scope": 2724,
                        "src": "5651:16:12",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2719,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5651:7:12",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2722,
                        "mutability": "mutable",
                        "name": "owner",
                        "nameLocation": "5677:5:12",
                        "nodeType": "VariableDeclaration",
                        "scope": 2724,
                        "src": "5669:13:12",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2721,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5669:7:12",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5650:33:12"
                  },
                  "src": "5616:68:12"
                },
                {
                  "documentation": {
                    "id": 2725,
                    "nodeType": "StructuredDocumentation",
                    "src": "5690:174:12",
                    "text": " @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n @param approver Address initiating an approval operation."
                  },
                  "errorSelector": "3e31884e",
                  "id": 2729,
                  "name": "ERC1155InvalidApprover",
                  "nameLocation": "5875:22:12",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 2728,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2727,
                        "mutability": "mutable",
                        "name": "approver",
                        "nameLocation": "5906:8:12",
                        "nodeType": "VariableDeclaration",
                        "scope": 2729,
                        "src": "5898:16:12",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2726,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5898:7:12",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5897:18:12"
                  },
                  "src": "5869:47:12"
                },
                {
                  "documentation": {
                    "id": 2730,
                    "nodeType": "StructuredDocumentation",
                    "src": "5922:197:12",
                    "text": " @dev Indicates a failure with the `operator` to be approved. Used in approvals.\n @param operator Address that may be allowed to operate on tokens without being their owner."
                  },
                  "errorSelector": "ced3e100",
                  "id": 2734,
                  "name": "ERC1155InvalidOperator",
                  "nameLocation": "6130:22:12",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 2733,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2732,
                        "mutability": "mutable",
                        "name": "operator",
                        "nameLocation": "6161:8:12",
                        "nodeType": "VariableDeclaration",
                        "scope": 2734,
                        "src": "6153:16:12",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2731,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "6153:7:12",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6152:18:12"
                  },
                  "src": "6124:47:12"
                },
                {
                  "documentation": {
                    "id": 2735,
                    "nodeType": "StructuredDocumentation",
                    "src": "6177:280:12",
                    "text": " @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.\n Used in batch transfers.\n @param idsLength Length of the array of token identifiers\n @param valuesLength Length of the array of token amounts"
                  },
                  "errorSelector": "5b059991",
                  "id": 2741,
                  "name": "ERC1155InvalidArrayLength",
                  "nameLocation": "6468:25:12",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 2740,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2737,
                        "mutability": "mutable",
                        "name": "idsLength",
                        "nameLocation": "6502:9:12",
                        "nodeType": "VariableDeclaration",
                        "scope": 2741,
                        "src": "6494:17:12",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2736,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6494:7:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2739,
                        "mutability": "mutable",
                        "name": "valuesLength",
                        "nameLocation": "6521:12:12",
                        "nodeType": "VariableDeclaration",
                        "scope": 2741,
                        "src": "6513:20:12",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2738,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6513:7:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6493:41:12"
                  },
                  "src": "6462:73:12"
                }
              ],
              "scope": 2743,
              "src": "4430:2107:12",
              "usedErrors": [
                2707,
                2712,
                2717,
                2724,
                2729,
                2734,
                2741
              ],
              "usedEvents": []
            }
          ],
          "src": "112:6426:12"
        },
        "id": 12
      },
      "@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol",
          "exportedSymbols": {
            "Address": [
              3641
            ],
            "ERC1967Utils": [
              3036
            ],
            "IBeacon": [
              3046
            ],
            "IERC1967": [
              2595
            ],
            "StorageSlot": [
              4979
            ]
          },
          "id": 3037,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 2744,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".21"
              ],
              "nodeType": "PragmaDirective",
              "src": "114:24:13"
            },
            {
              "absolutePath": "@openzeppelin/contracts/proxy/beacon/IBeacon.sol",
              "file": "../beacon/IBeacon.sol",
              "id": 2746,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 3037,
              "sourceUnit": 3047,
              "src": "140:46:13",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 2745,
                    "name": "IBeacon",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3046,
                    "src": "148:7:13",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/interfaces/IERC1967.sol",
              "file": "../../interfaces/IERC1967.sol",
              "id": 2748,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 3037,
              "sourceUnit": 2596,
              "src": "187:55:13",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 2747,
                    "name": "IERC1967",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2595,
                    "src": "195:8:13",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/utils/Address.sol",
              "file": "../../utils/Address.sol",
              "id": 2750,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 3037,
              "sourceUnit": 3642,
              "src": "243:48:13",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 2749,
                    "name": "Address",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3641,
                    "src": "251:7:13",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/utils/StorageSlot.sol",
              "file": "../../utils/StorageSlot.sol",
              "id": 2752,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 3037,
              "sourceUnit": 4980,
              "src": "292:56:13",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 2751,
                    "name": "StorageSlot",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4979,
                    "src": "300:11:13",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [],
              "canonicalName": "ERC1967Utils",
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 2753,
                "nodeType": "StructuredDocumentation",
                "src": "350:145:13",
                "text": " @dev This library provides getters and event emitting update functions for\n https://eips.ethereum.org/EIPS/eip-1967[ERC-1967] slots."
              },
              "fullyImplemented": true,
              "id": 3036,
              "linearizedBaseContracts": [
                3036
              ],
              "name": "ERC1967Utils",
              "nameLocation": "504:12:13",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "constant": true,
                  "documentation": {
                    "id": 2754,
                    "nodeType": "StructuredDocumentation",
                    "src": "523:170:13",
                    "text": " @dev Storage slot with the address of the current implementation.\n This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1."
                  },
                  "id": 2757,
                  "mutability": "constant",
                  "name": "IMPLEMENTATION_SLOT",
                  "nameLocation": "789:19:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 3036,
                  "src": "763:114:13",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 2755,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "763:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": {
                    "hexValue": "307833363038393461313362613161333231303636376338323834393264623938646361336532303736636333373335613932306133636135303564333832626263",
                    "id": 2756,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "811:66:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_24440054405305269366569402256811496959409073762505157381672968839269610695612_by_1",
                      "typeString": "int_const 2444...(69 digits omitted)...5612"
                    },
                    "value": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc"
                  },
                  "visibility": "internal"
                },
                {
                  "documentation": {
                    "id": 2758,
                    "nodeType": "StructuredDocumentation",
                    "src": "884:69:13",
                    "text": " @dev The `implementation` of the proxy is invalid."
                  },
                  "errorSelector": "4c9c8ce3",
                  "id": 2762,
                  "name": "ERC1967InvalidImplementation",
                  "nameLocation": "964:28:13",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 2761,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2760,
                        "mutability": "mutable",
                        "name": "implementation",
                        "nameLocation": "1001:14:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2762,
                        "src": "993:22:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2759,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "993:7:13",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "992:24:13"
                  },
                  "src": "958:59:13"
                },
                {
                  "documentation": {
                    "id": 2763,
                    "nodeType": "StructuredDocumentation",
                    "src": "1023:60:13",
                    "text": " @dev The `admin` of the proxy is invalid."
                  },
                  "errorSelector": "62e77ba2",
                  "id": 2767,
                  "name": "ERC1967InvalidAdmin",
                  "nameLocation": "1094:19:13",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 2766,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2765,
                        "mutability": "mutable",
                        "name": "admin",
                        "nameLocation": "1122:5:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2767,
                        "src": "1114:13:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2764,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1114:7:13",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1113:15:13"
                  },
                  "src": "1088:41:13"
                },
                {
                  "documentation": {
                    "id": 2768,
                    "nodeType": "StructuredDocumentation",
                    "src": "1135:61:13",
                    "text": " @dev The `beacon` of the proxy is invalid."
                  },
                  "errorSelector": "64ced0ec",
                  "id": 2772,
                  "name": "ERC1967InvalidBeacon",
                  "nameLocation": "1207:20:13",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 2771,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2770,
                        "mutability": "mutable",
                        "name": "beacon",
                        "nameLocation": "1236:6:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2772,
                        "src": "1228:14:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2769,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1228:7:13",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1227:16:13"
                  },
                  "src": "1201:43:13"
                },
                {
                  "documentation": {
                    "id": 2773,
                    "nodeType": "StructuredDocumentation",
                    "src": "1250:82:13",
                    "text": " @dev An upgrade function sees `msg.value > 0` that may be lost."
                  },
                  "errorSelector": "b398979f",
                  "id": 2775,
                  "name": "ERC1967NonPayable",
                  "nameLocation": "1343:17:13",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 2774,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1360:2:13"
                  },
                  "src": "1337:26:13"
                },
                {
                  "body": {
                    "id": 2787,
                    "nodeType": "Block",
                    "src": "1502:77:13",
                    "statements": [
                      {
                        "expression": {
                          "expression": {
                            "arguments": [
                              {
                                "id": 2783,
                                "name": "IMPLEMENTATION_SLOT",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2757,
                                "src": "1546:19:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              ],
                              "expression": {
                                "id": 2781,
                                "name": "StorageSlot",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4979,
                                "src": "1519:11:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_StorageSlot_$4979_$",
                                  "typeString": "type(library StorageSlot)"
                                }
                              },
                              "id": 2782,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "1531:14:13",
                              "memberName": "getAddressSlot",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 4890,
                              "src": "1519:26:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_struct$_AddressSlot_$4861_storage_ptr_$",
                                "typeString": "function (bytes32) pure returns (struct StorageSlot.AddressSlot storage pointer)"
                              }
                            },
                            "id": 2784,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1519:47:13",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_AddressSlot_$4861_storage_ptr",
                              "typeString": "struct StorageSlot.AddressSlot storage pointer"
                            }
                          },
                          "id": 2785,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "1567:5:13",
                          "memberName": "value",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 4860,
                          "src": "1519:53:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "functionReturnParameters": 2780,
                        "id": 2786,
                        "nodeType": "Return",
                        "src": "1512:60:13"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2776,
                    "nodeType": "StructuredDocumentation",
                    "src": "1369:67:13",
                    "text": " @dev Returns the current implementation address."
                  },
                  "id": 2788,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getImplementation",
                  "nameLocation": "1450:17:13",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2777,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1467:2:13"
                  },
                  "returnParameters": {
                    "id": 2780,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2779,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2788,
                        "src": "1493:7:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2778,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1493:7:13",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1492:9:13"
                  },
                  "scope": 3036,
                  "src": "1441:138:13",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2814,
                    "nodeType": "Block",
                    "src": "1734:218:13",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2798,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "expression": {
                                "id": 2794,
                                "name": "newImplementation",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2791,
                                "src": "1748:17:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "id": 2795,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "1766:4:13",
                              "memberName": "code",
                              "nodeType": "MemberAccess",
                              "src": "1748:22:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 2796,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "1771:6:13",
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "1748:29:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 2797,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1781:1:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "1748:34:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 2804,
                        "nodeType": "IfStatement",
                        "src": "1744:119:13",
                        "trueBody": {
                          "id": 2803,
                          "nodeType": "Block",
                          "src": "1784:79:13",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "id": 2800,
                                    "name": "newImplementation",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2791,
                                    "src": "1834:17:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 2799,
                                  "name": "ERC1967InvalidImplementation",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2762,
                                  "src": "1805:28:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$",
                                    "typeString": "function (address) pure returns (error)"
                                  }
                                },
                                "id": 2801,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1805:47:13",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 2802,
                              "nodeType": "RevertStatement",
                              "src": "1798:54:13"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "id": 2812,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 2808,
                                  "name": "IMPLEMENTATION_SLOT",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2757,
                                  "src": "1899:19:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                ],
                                "expression": {
                                  "id": 2805,
                                  "name": "StorageSlot",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4979,
                                  "src": "1872:11:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_StorageSlot_$4979_$",
                                    "typeString": "type(library StorageSlot)"
                                  }
                                },
                                "id": 2807,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "1884:14:13",
                                "memberName": "getAddressSlot",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 4890,
                                "src": "1872:26:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_struct$_AddressSlot_$4861_storage_ptr_$",
                                  "typeString": "function (bytes32) pure returns (struct StorageSlot.AddressSlot storage pointer)"
                                }
                              },
                              "id": 2809,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1872:47:13",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_AddressSlot_$4861_storage_ptr",
                                "typeString": "struct StorageSlot.AddressSlot storage pointer"
                              }
                            },
                            "id": 2810,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberLocation": "1920:5:13",
                            "memberName": "value",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4860,
                            "src": "1872:53:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 2811,
                            "name": "newImplementation",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2791,
                            "src": "1928:17:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "1872:73:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 2813,
                        "nodeType": "ExpressionStatement",
                        "src": "1872:73:13"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2789,
                    "nodeType": "StructuredDocumentation",
                    "src": "1585:81:13",
                    "text": " @dev Stores a new address in the ERC-1967 implementation slot."
                  },
                  "id": 2815,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_setImplementation",
                  "nameLocation": "1680:18:13",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2792,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2791,
                        "mutability": "mutable",
                        "name": "newImplementation",
                        "nameLocation": "1707:17:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2815,
                        "src": "1699:25:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2790,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1699:7:13",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1698:27:13"
                  },
                  "returnParameters": {
                    "id": 2793,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1734:0:13"
                  },
                  "scope": 3036,
                  "src": "1671:281:13",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 2850,
                    "nodeType": "Block",
                    "src": "2345:263:13",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 2824,
                              "name": "newImplementation",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2818,
                              "src": "2374:17:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 2823,
                            "name": "_setImplementation",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2815,
                            "src": "2355:18:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address)"
                            }
                          },
                          "id": 2825,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2355:37:13",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2826,
                        "nodeType": "ExpressionStatement",
                        "src": "2355:37:13"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 2830,
                              "name": "newImplementation",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2818,
                              "src": "2425:17:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "id": 2827,
                              "name": "IERC1967",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2595,
                              "src": "2407:8:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_IERC1967_$2595_$",
                                "typeString": "type(contract IERC1967)"
                              }
                            },
                            "id": 2829,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "2416:8:13",
                            "memberName": "Upgraded",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2582,
                            "src": "2407:17:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address)"
                            }
                          },
                          "id": 2831,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2407:36:13",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2832,
                        "nodeType": "EmitStatement",
                        "src": "2402:41:13"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2836,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 2833,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2820,
                              "src": "2458:4:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 2834,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "2463:6:13",
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "2458:11:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 2835,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2472:1:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "2458:15:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 2848,
                          "nodeType": "Block",
                          "src": "2559:43:13",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 2845,
                                  "name": "_checkNonPayable",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3035,
                                  "src": "2573:16:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                                    "typeString": "function ()"
                                  }
                                },
                                "id": 2846,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2573:18:13",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 2847,
                              "nodeType": "ExpressionStatement",
                              "src": "2573:18:13"
                            }
                          ]
                        },
                        "id": 2849,
                        "nodeType": "IfStatement",
                        "src": "2454:148:13",
                        "trueBody": {
                          "id": 2844,
                          "nodeType": "Block",
                          "src": "2475:78:13",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 2840,
                                    "name": "newImplementation",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2818,
                                    "src": "2518:17:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "id": 2841,
                                    "name": "data",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2820,
                                    "src": "2537:4:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  ],
                                  "expression": {
                                    "id": 2837,
                                    "name": "Address",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3641,
                                    "src": "2489:7:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_Address_$3641_$",
                                      "typeString": "type(library Address)"
                                    }
                                  },
                                  "id": 2839,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "2497:20:13",
                                  "memberName": "functionDelegateCall",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3558,
                                  "src": "2489:28:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                                    "typeString": "function (address,bytes memory) returns (bytes memory)"
                                  }
                                },
                                "id": 2842,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2489:53:13",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 2843,
                              "nodeType": "ExpressionStatement",
                              "src": "2489:53:13"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2816,
                    "nodeType": "StructuredDocumentation",
                    "src": "1958:301:13",
                    "text": " @dev Performs implementation upgrade with additional setup call if data is nonempty.\n This function is payable only if the setup call is performed, otherwise `msg.value` is rejected\n to avoid stuck value in the contract.\n Emits an {IERC1967-Upgraded} event."
                  },
                  "id": 2851,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "upgradeToAndCall",
                  "nameLocation": "2273:16:13",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2821,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2818,
                        "mutability": "mutable",
                        "name": "newImplementation",
                        "nameLocation": "2298:17:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2851,
                        "src": "2290:25:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2817,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2290:7:13",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2820,
                        "mutability": "mutable",
                        "name": "data",
                        "nameLocation": "2330:4:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2851,
                        "src": "2317:17:13",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 2819,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "2317:5:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2289:46:13"
                  },
                  "returnParameters": {
                    "id": 2822,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2345:0:13"
                  },
                  "scope": 3036,
                  "src": "2264:344:13",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "documentation": {
                    "id": 2852,
                    "nodeType": "StructuredDocumentation",
                    "src": "2614:145:13",
                    "text": " @dev Storage slot with the admin of the contract.\n This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1."
                  },
                  "id": 2855,
                  "mutability": "constant",
                  "name": "ADMIN_SLOT",
                  "nameLocation": "2855:10:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 3036,
                  "src": "2829:105:13",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 2853,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2829:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": {
                    "hexValue": "307862353331323736383461353638623331373361653133623966386136303136653234336536336236653865653131373864366137313738353062356436313033",
                    "id": 2854,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2868:66:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_81955473079516046949633743016697847541294818689821282749996681496272635257091_by_1",
                      "typeString": "int_const 8195...(69 digits omitted)...7091"
                    },
                    "value": "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103"
                  },
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2867,
                    "nodeType": "Block",
                    "src": "3339:68:13",
                    "statements": [
                      {
                        "expression": {
                          "expression": {
                            "arguments": [
                              {
                                "id": 2863,
                                "name": "ADMIN_SLOT",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2855,
                                "src": "3383:10:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              ],
                              "expression": {
                                "id": 2861,
                                "name": "StorageSlot",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4979,
                                "src": "3356:11:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_StorageSlot_$4979_$",
                                  "typeString": "type(library StorageSlot)"
                                }
                              },
                              "id": 2862,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "3368:14:13",
                              "memberName": "getAddressSlot",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 4890,
                              "src": "3356:26:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_struct$_AddressSlot_$4861_storage_ptr_$",
                                "typeString": "function (bytes32) pure returns (struct StorageSlot.AddressSlot storage pointer)"
                              }
                            },
                            "id": 2864,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3356:38:13",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_AddressSlot_$4861_storage_ptr",
                              "typeString": "struct StorageSlot.AddressSlot storage pointer"
                            }
                          },
                          "id": 2865,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "3395:5:13",
                          "memberName": "value",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 4860,
                          "src": "3356:44:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "functionReturnParameters": 2860,
                        "id": 2866,
                        "nodeType": "Return",
                        "src": "3349:51:13"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2856,
                    "nodeType": "StructuredDocumentation",
                    "src": "2941:341:13",
                    "text": " @dev Returns the current admin.\n TIP: To get this value clients can read directly from the storage slot shown below (specified by ERC-1967) using\n the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`"
                  },
                  "id": 2868,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getAdmin",
                  "nameLocation": "3296:8:13",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2857,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3304:2:13"
                  },
                  "returnParameters": {
                    "id": 2860,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2859,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2868,
                        "src": "3330:7:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2858,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3330:7:13",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3329:9:13"
                  },
                  "scope": 3036,
                  "src": "3287:120:13",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2898,
                    "nodeType": "Block",
                    "src": "3535:172:13",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 2879,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 2874,
                            "name": "newAdmin",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2871,
                            "src": "3549:8:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 2877,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "3569:1:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 2876,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "3561:7:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 2875,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "3561:7:13",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 2878,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3561:10:13",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "3549:22:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 2888,
                        "nodeType": "IfStatement",
                        "src": "3545:91:13",
                        "trueBody": {
                          "id": 2887,
                          "nodeType": "Block",
                          "src": "3573:63:13",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "hexValue": "30",
                                        "id": 2883,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "3622:1:13",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        }
                                      ],
                                      "id": 2882,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "3614:7:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_address_$",
                                        "typeString": "type(address)"
                                      },
                                      "typeName": {
                                        "id": 2881,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3614:7:13",
                                        "typeDescriptions": {}
                                      }
                                    },
                                    "id": 2884,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "3614:10:13",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 2880,
                                  "name": "ERC1967InvalidAdmin",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2767,
                                  "src": "3594:19:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$",
                                    "typeString": "function (address) pure returns (error)"
                                  }
                                },
                                "id": 2885,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3594:31:13",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 2886,
                              "nodeType": "RevertStatement",
                              "src": "3587:38:13"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "id": 2896,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 2892,
                                  "name": "ADMIN_SLOT",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2855,
                                  "src": "3672:10:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                ],
                                "expression": {
                                  "id": 2889,
                                  "name": "StorageSlot",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4979,
                                  "src": "3645:11:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_StorageSlot_$4979_$",
                                    "typeString": "type(library StorageSlot)"
                                  }
                                },
                                "id": 2891,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "3657:14:13",
                                "memberName": "getAddressSlot",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 4890,
                                "src": "3645:26:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_struct$_AddressSlot_$4861_storage_ptr_$",
                                  "typeString": "function (bytes32) pure returns (struct StorageSlot.AddressSlot storage pointer)"
                                }
                              },
                              "id": 2893,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3645:38:13",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_AddressSlot_$4861_storage_ptr",
                                "typeString": "struct StorageSlot.AddressSlot storage pointer"
                              }
                            },
                            "id": 2894,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberLocation": "3684:5:13",
                            "memberName": "value",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4860,
                            "src": "3645:44:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 2895,
                            "name": "newAdmin",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2871,
                            "src": "3692:8:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "3645:55:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 2897,
                        "nodeType": "ExpressionStatement",
                        "src": "3645:55:13"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2869,
                    "nodeType": "StructuredDocumentation",
                    "src": "3413:72:13",
                    "text": " @dev Stores a new address in the ERC-1967 admin slot."
                  },
                  "id": 2899,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_setAdmin",
                  "nameLocation": "3499:9:13",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2872,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2871,
                        "mutability": "mutable",
                        "name": "newAdmin",
                        "nameLocation": "3517:8:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2899,
                        "src": "3509:16:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2870,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3509:7:13",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3508:18:13"
                  },
                  "returnParameters": {
                    "id": 2873,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3535:0:13"
                  },
                  "scope": 3036,
                  "src": "3490:217:13",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 2917,
                    "nodeType": "Block",
                    "src": "3875:94:13",
                    "statements": [
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 2908,
                                "name": "getAdmin",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2868,
                                "src": "3912:8:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                  "typeString": "function () view returns (address)"
                                }
                              },
                              "id": 2909,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3912:10:13",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 2910,
                              "name": "newAdmin",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2902,
                              "src": "3924:8:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "id": 2905,
                              "name": "IERC1967",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2595,
                              "src": "3890:8:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_IERC1967_$2595_$",
                                "typeString": "type(contract IERC1967)"
                              }
                            },
                            "id": 2907,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "3899:12:13",
                            "memberName": "AdminChanged",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2589,
                            "src": "3890:21:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                              "typeString": "function (address,address)"
                            }
                          },
                          "id": 2911,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3890:43:13",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2912,
                        "nodeType": "EmitStatement",
                        "src": "3885:48:13"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 2914,
                              "name": "newAdmin",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2902,
                              "src": "3953:8:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 2913,
                            "name": "_setAdmin",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2899,
                            "src": "3943:9:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address)"
                            }
                          },
                          "id": 2915,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3943:19:13",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2916,
                        "nodeType": "ExpressionStatement",
                        "src": "3943:19:13"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2900,
                    "nodeType": "StructuredDocumentation",
                    "src": "3713:109:13",
                    "text": " @dev Changes the admin of the proxy.\n Emits an {IERC1967-AdminChanged} event."
                  },
                  "id": 2918,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "changeAdmin",
                  "nameLocation": "3836:11:13",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2903,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2902,
                        "mutability": "mutable",
                        "name": "newAdmin",
                        "nameLocation": "3856:8:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2918,
                        "src": "3848:16:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2901,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3848:7:13",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3847:18:13"
                  },
                  "returnParameters": {
                    "id": 2904,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3875:0:13"
                  },
                  "scope": 3036,
                  "src": "3827:142:13",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "documentation": {
                    "id": 2919,
                    "nodeType": "StructuredDocumentation",
                    "src": "3975:201:13",
                    "text": " @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\n This is the keccak-256 hash of \"eip1967.proxy.beacon\" subtracted by 1."
                  },
                  "id": 2922,
                  "mutability": "constant",
                  "name": "BEACON_SLOT",
                  "nameLocation": "4272:11:13",
                  "nodeType": "VariableDeclaration",
                  "scope": 3036,
                  "src": "4246:106:13",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 2920,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4246:7:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": {
                    "hexValue": "307861336630616437346535343233616562666438306433656634333436353738333335613961373261656165653539666636636233353832623335313333643530",
                    "id": 2921,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "4286:66:13",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_74152234768234802001998023604048924213078445070507226371336425913862612794704_by_1",
                      "typeString": "int_const 7415...(69 digits omitted)...4704"
                    },
                    "value": "0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50"
                  },
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2934,
                    "nodeType": "Block",
                    "src": "4468:69:13",
                    "statements": [
                      {
                        "expression": {
                          "expression": {
                            "arguments": [
                              {
                                "id": 2930,
                                "name": "BEACON_SLOT",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2922,
                                "src": "4512:11:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              ],
                              "expression": {
                                "id": 2928,
                                "name": "StorageSlot",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4979,
                                "src": "4485:11:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_StorageSlot_$4979_$",
                                  "typeString": "type(library StorageSlot)"
                                }
                              },
                              "id": 2929,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "4497:14:13",
                              "memberName": "getAddressSlot",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 4890,
                              "src": "4485:26:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_struct$_AddressSlot_$4861_storage_ptr_$",
                                "typeString": "function (bytes32) pure returns (struct StorageSlot.AddressSlot storage pointer)"
                              }
                            },
                            "id": 2931,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4485:39:13",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_AddressSlot_$4861_storage_ptr",
                              "typeString": "struct StorageSlot.AddressSlot storage pointer"
                            }
                          },
                          "id": 2932,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "4525:5:13",
                          "memberName": "value",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 4860,
                          "src": "4485:45:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "functionReturnParameters": 2927,
                        "id": 2933,
                        "nodeType": "Return",
                        "src": "4478:52:13"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2923,
                    "nodeType": "StructuredDocumentation",
                    "src": "4359:51:13",
                    "text": " @dev Returns the current beacon."
                  },
                  "id": 2935,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getBeacon",
                  "nameLocation": "4424:9:13",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2924,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "4433:2:13"
                  },
                  "returnParameters": {
                    "id": 2927,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2926,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 2935,
                        "src": "4459:7:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2925,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4459:7:13",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4458:9:13"
                  },
                  "scope": 3036,
                  "src": "4415:122:13",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 2980,
                    "nodeType": "Block",
                    "src": "4667:390:13",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2945,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "expression": {
                                "id": 2941,
                                "name": "newBeacon",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2938,
                                "src": "4681:9:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "id": 2942,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "4691:4:13",
                              "memberName": "code",
                              "nodeType": "MemberAccess",
                              "src": "4681:14:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 2943,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "4696:6:13",
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "4681:21:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 2944,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4706:1:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "4681:26:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 2951,
                        "nodeType": "IfStatement",
                        "src": "4677:95:13",
                        "trueBody": {
                          "id": 2950,
                          "nodeType": "Block",
                          "src": "4709:63:13",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "id": 2947,
                                    "name": "newBeacon",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2938,
                                    "src": "4751:9:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 2946,
                                  "name": "ERC1967InvalidBeacon",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2772,
                                  "src": "4730:20:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$",
                                    "typeString": "function (address) pure returns (error)"
                                  }
                                },
                                "id": 2948,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4730:31:13",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 2949,
                              "nodeType": "RevertStatement",
                              "src": "4723:38:13"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "id": 2959,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 2955,
                                  "name": "BEACON_SLOT",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2922,
                                  "src": "4809:11:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                ],
                                "expression": {
                                  "id": 2952,
                                  "name": "StorageSlot",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4979,
                                  "src": "4782:11:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_StorageSlot_$4979_$",
                                    "typeString": "type(library StorageSlot)"
                                  }
                                },
                                "id": 2954,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "4794:14:13",
                                "memberName": "getAddressSlot",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 4890,
                                "src": "4782:26:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_struct$_AddressSlot_$4861_storage_ptr_$",
                                  "typeString": "function (bytes32) pure returns (struct StorageSlot.AddressSlot storage pointer)"
                                }
                              },
                              "id": 2956,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4782:39:13",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_AddressSlot_$4861_storage_ptr",
                                "typeString": "struct StorageSlot.AddressSlot storage pointer"
                              }
                            },
                            "id": 2957,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberLocation": "4822:5:13",
                            "memberName": "value",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4860,
                            "src": "4782:45:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 2958,
                            "name": "newBeacon",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2938,
                            "src": "4830:9:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "4782:57:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 2960,
                        "nodeType": "ExpressionStatement",
                        "src": "4782:57:13"
                      },
                      {
                        "assignments": [
                          2962
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2962,
                            "mutability": "mutable",
                            "name": "beaconImplementation",
                            "nameLocation": "4858:20:13",
                            "nodeType": "VariableDeclaration",
                            "scope": 2980,
                            "src": "4850:28:13",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 2961,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "4850:7:13",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 2968,
                        "initialValue": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 2964,
                                  "name": "newBeacon",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2938,
                                  "src": "4889:9:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 2963,
                                "name": "IBeacon",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3046,
                                "src": "4881:7:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IBeacon_$3046_$",
                                  "typeString": "type(contract IBeacon)"
                                }
                              },
                              "id": 2965,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4881:18:13",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IBeacon_$3046",
                                "typeString": "contract IBeacon"
                              }
                            },
                            "id": 2966,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "4900:14:13",
                            "memberName": "implementation",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3045,
                            "src": "4881:33:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                              "typeString": "function () view external returns (address)"
                            }
                          },
                          "id": 2967,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4881:35:13",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4850:66:13"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2973,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "expression": {
                                "id": 2969,
                                "name": "beaconImplementation",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2962,
                                "src": "4930:20:13",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "id": 2970,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "4951:4:13",
                              "memberName": "code",
                              "nodeType": "MemberAccess",
                              "src": "4930:25:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 2971,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "4956:6:13",
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "4930:32:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 2972,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4966:1:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "4930:37:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 2979,
                        "nodeType": "IfStatement",
                        "src": "4926:125:13",
                        "trueBody": {
                          "id": 2978,
                          "nodeType": "Block",
                          "src": "4969:82:13",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "id": 2975,
                                    "name": "beaconImplementation",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2962,
                                    "src": "5019:20:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 2974,
                                  "name": "ERC1967InvalidImplementation",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2762,
                                  "src": "4990:28:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$",
                                    "typeString": "function (address) pure returns (error)"
                                  }
                                },
                                "id": 2976,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4990:50:13",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 2977,
                              "nodeType": "RevertStatement",
                              "src": "4983:57:13"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2936,
                    "nodeType": "StructuredDocumentation",
                    "src": "4543:72:13",
                    "text": " @dev Stores a new beacon in the ERC-1967 beacon slot."
                  },
                  "id": 2981,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_setBeacon",
                  "nameLocation": "4629:10:13",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2939,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2938,
                        "mutability": "mutable",
                        "name": "newBeacon",
                        "nameLocation": "4648:9:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 2981,
                        "src": "4640:17:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2937,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4640:7:13",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4639:19:13"
                  },
                  "returnParameters": {
                    "id": 2940,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "4667:0:13"
                  },
                  "scope": 3036,
                  "src": "4620:437:13",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 3020,
                    "nodeType": "Block",
                    "src": "5661:263:13",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 2990,
                              "name": "newBeacon",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2984,
                              "src": "5682:9:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 2989,
                            "name": "_setBeacon",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2981,
                            "src": "5671:10:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address)"
                            }
                          },
                          "id": 2991,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5671:21:13",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2992,
                        "nodeType": "ExpressionStatement",
                        "src": "5671:21:13"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 2996,
                              "name": "newBeacon",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2984,
                              "src": "5731:9:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "id": 2993,
                              "name": "IERC1967",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2595,
                              "src": "5707:8:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_IERC1967_$2595_$",
                                "typeString": "type(contract IERC1967)"
                              }
                            },
                            "id": 2995,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "5716:14:13",
                            "memberName": "BeaconUpgraded",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2594,
                            "src": "5707:23:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address)"
                            }
                          },
                          "id": 2997,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5707:34:13",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2998,
                        "nodeType": "EmitStatement",
                        "src": "5702:39:13"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 3002,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 2999,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2986,
                              "src": "5756:4:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 3000,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "5761:6:13",
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "5756:11:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 3001,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5770:1:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "5756:15:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 3018,
                          "nodeType": "Block",
                          "src": "5875:43:13",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 3015,
                                  "name": "_checkNonPayable",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3035,
                                  "src": "5889:16:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                                    "typeString": "function ()"
                                  }
                                },
                                "id": 3016,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "5889:18:13",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 3017,
                              "nodeType": "ExpressionStatement",
                              "src": "5889:18:13"
                            }
                          ]
                        },
                        "id": 3019,
                        "nodeType": "IfStatement",
                        "src": "5752:166:13",
                        "trueBody": {
                          "id": 3014,
                          "nodeType": "Block",
                          "src": "5773:96:13",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [],
                                    "expression": {
                                      "argumentTypes": [],
                                      "expression": {
                                        "arguments": [
                                          {
                                            "id": 3007,
                                            "name": "newBeacon",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2984,
                                            "src": "5824:9:13",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          ],
                                          "id": 3006,
                                          "name": "IBeacon",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 3046,
                                          "src": "5816:7:13",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_contract$_IBeacon_$3046_$",
                                            "typeString": "type(contract IBeacon)"
                                          }
                                        },
                                        "id": 3008,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "typeConversion",
                                        "lValueRequested": false,
                                        "nameLocations": [],
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "5816:18:13",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_contract$_IBeacon_$3046",
                                          "typeString": "contract IBeacon"
                                        }
                                      },
                                      "id": 3009,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberLocation": "5835:14:13",
                                      "memberName": "implementation",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 3045,
                                      "src": "5816:33:13",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                                        "typeString": "function () view external returns (address)"
                                      }
                                    },
                                    "id": 3010,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "5816:35:13",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "id": 3011,
                                    "name": "data",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2986,
                                    "src": "5853:4:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  ],
                                  "expression": {
                                    "id": 3003,
                                    "name": "Address",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3641,
                                    "src": "5787:7:13",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_Address_$3641_$",
                                      "typeString": "type(library Address)"
                                    }
                                  },
                                  "id": 3005,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "5795:20:13",
                                  "memberName": "functionDelegateCall",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3558,
                                  "src": "5787:28:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                                    "typeString": "function (address,bytes memory) returns (bytes memory)"
                                  }
                                },
                                "id": 3012,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "5787:71:13",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 3013,
                              "nodeType": "ExpressionStatement",
                              "src": "5787:71:13"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 2982,
                    "nodeType": "StructuredDocumentation",
                    "src": "5063:514:13",
                    "text": " @dev Change the beacon and trigger a setup call if data is nonempty.\n This function is payable only if the setup call is performed, otherwise `msg.value` is rejected\n to avoid stuck value in the contract.\n Emits an {IERC1967-BeaconUpgraded} event.\n CAUTION: Invoking this function has no effect on an instance of {BeaconProxy} since v5, since\n it uses an immutable beacon without looking at the value of the ERC-1967 beacon slot for\n efficiency."
                  },
                  "id": 3021,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "upgradeBeaconToAndCall",
                  "nameLocation": "5591:22:13",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 2987,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 2984,
                        "mutability": "mutable",
                        "name": "newBeacon",
                        "nameLocation": "5622:9:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 3021,
                        "src": "5614:17:13",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 2983,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5614:7:13",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 2986,
                        "mutability": "mutable",
                        "name": "data",
                        "nameLocation": "5646:4:13",
                        "nodeType": "VariableDeclaration",
                        "scope": 3021,
                        "src": "5633:17:13",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 2985,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "5633:5:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5613:38:13"
                  },
                  "returnParameters": {
                    "id": 2988,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "5661:0:13"
                  },
                  "scope": 3036,
                  "src": "5582:342:13",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 3034,
                    "nodeType": "Block",
                    "src": "6149:86:13",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 3028,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 3025,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "6163:3:13",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 3026,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "6167:5:13",
                            "memberName": "value",
                            "nodeType": "MemberAccess",
                            "src": "6163:9:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 3027,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "6175:1:13",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "6163:13:13",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 3033,
                        "nodeType": "IfStatement",
                        "src": "6159:70:13",
                        "trueBody": {
                          "id": 3032,
                          "nodeType": "Block",
                          "src": "6178:51:13",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 3029,
                                  "name": "ERC1967NonPayable",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2775,
                                  "src": "6199:17:13",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                                    "typeString": "function () pure returns (error)"
                                  }
                                },
                                "id": 3030,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "6199:19:13",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 3031,
                              "nodeType": "RevertStatement",
                              "src": "6192:26:13"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3022,
                    "nodeType": "StructuredDocumentation",
                    "src": "5930:178:13",
                    "text": " @dev Reverts if `msg.value` is not zero. It can be used to avoid `msg.value` stuck in the contract\n if an upgrade doesn't perform an initialization call."
                  },
                  "id": 3035,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_checkNonPayable",
                  "nameLocation": "6122:16:13",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3023,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "6138:2:13"
                  },
                  "returnParameters": {
                    "id": 3024,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "6149:0:13"
                  },
                  "scope": 3036,
                  "src": "6113:122:13",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "private"
                }
              ],
              "scope": 3037,
              "src": "496:5741:13",
              "usedErrors": [
                2762,
                2767,
                2772,
                2775
              ],
              "usedEvents": []
            }
          ],
          "src": "114:6124:13"
        },
        "id": 13
      },
      "@openzeppelin/contracts/proxy/beacon/IBeacon.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/proxy/beacon/IBeacon.sol",
          "exportedSymbols": {
            "IBeacon": [
              3046
            ]
          },
          "id": 3047,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 3038,
              "literals": [
                "solidity",
                ">=",
                "0.4",
                ".16"
              ],
              "nodeType": "PragmaDirective",
              "src": "108:25:14"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "canonicalName": "IBeacon",
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 3039,
                "nodeType": "StructuredDocumentation",
                "src": "135:79:14",
                "text": " @dev This is the interface that {BeaconProxy} expects of its beacon."
              },
              "fullyImplemented": false,
              "id": 3046,
              "linearizedBaseContracts": [
                3046
              ],
              "name": "IBeacon",
              "nameLocation": "225:7:14",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "documentation": {
                    "id": 3040,
                    "nodeType": "StructuredDocumentation",
                    "src": "239:168:14",
                    "text": " @dev Must return an address that can be used as a delegate call target.\n {UpgradeableBeacon} will check that this address is a contract."
                  },
                  "functionSelector": "5c60da1b",
                  "id": 3045,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "implementation",
                  "nameLocation": "421:14:14",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3041,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "435:2:14"
                  },
                  "returnParameters": {
                    "id": 3044,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3043,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 3045,
                        "src": "461:7:14",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3042,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "461:7:14",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "460:9:14"
                  },
                  "scope": 3046,
                  "src": "412:58:14",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 3047,
              "src": "215:257:14",
              "usedErrors": [],
              "usedEvents": []
            }
          ],
          "src": "108:365:14"
        },
        "id": 14
      },
      "@openzeppelin/contracts/token/ERC1155/IERC1155.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/token/ERC1155/IERC1155.sol",
          "exportedSymbols": {
            "IERC1155": [
              3169
            ],
            "IERC165": [
              6393
            ]
          },
          "id": 3170,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 3048,
              "literals": [
                "solidity",
                ">=",
                "0.6",
                ".2"
              ],
              "nodeType": "PragmaDirective",
              "src": "110:24:15"
            },
            {
              "absolutePath": "@openzeppelin/contracts/utils/introspection/IERC165.sol",
              "file": "../../utils/introspection/IERC165.sol",
              "id": 3050,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 3170,
              "sourceUnit": 6394,
              "src": "136:62:15",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 3049,
                    "name": "IERC165",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 6393,
                    "src": "144:7:15",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 3052,
                    "name": "IERC165",
                    "nameLocations": [
                      "359:7:15"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 6393,
                    "src": "359:7:15"
                  },
                  "id": 3053,
                  "nodeType": "InheritanceSpecifier",
                  "src": "359:7:15"
                }
              ],
              "canonicalName": "IERC1155",
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 3051,
                "nodeType": "StructuredDocumentation",
                "src": "200:136:15",
                "text": " @dev Required interface of an ERC-1155 compliant contract, as defined in the\n https://eips.ethereum.org/EIPS/eip-1155[ERC]."
              },
              "fullyImplemented": false,
              "id": 3169,
              "linearizedBaseContracts": [
                3169,
                6393
              ],
              "name": "IERC1155",
              "nameLocation": "347:8:15",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3054,
                    "nodeType": "StructuredDocumentation",
                    "src": "373:125:15",
                    "text": " @dev Emitted when `value` amount of tokens of type `id` are transferred from `from` to `to` by `operator`."
                  },
                  "eventSelector": "c3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62",
                  "id": 3066,
                  "name": "TransferSingle",
                  "nameLocation": "509:14:15",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3065,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3056,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "operator",
                        "nameLocation": "540:8:15",
                        "nodeType": "VariableDeclaration",
                        "scope": 3066,
                        "src": "524:24:15",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3055,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "524:7:15",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3058,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "566:4:15",
                        "nodeType": "VariableDeclaration",
                        "scope": 3066,
                        "src": "550:20:15",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3057,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "550:7:15",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3060,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "588:2:15",
                        "nodeType": "VariableDeclaration",
                        "scope": 3066,
                        "src": "572:18:15",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3059,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "572:7:15",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3062,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "id",
                        "nameLocation": "600:2:15",
                        "nodeType": "VariableDeclaration",
                        "scope": 3066,
                        "src": "592:10:15",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3061,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "592:7:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3064,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "612:5:15",
                        "nodeType": "VariableDeclaration",
                        "scope": 3066,
                        "src": "604:13:15",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3063,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "604:7:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "523:95:15"
                  },
                  "src": "503:116:15"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3067,
                    "nodeType": "StructuredDocumentation",
                    "src": "625:144:15",
                    "text": " @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\n transfers."
                  },
                  "eventSelector": "4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb",
                  "id": 3081,
                  "name": "TransferBatch",
                  "nameLocation": "780:13:15",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3080,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3069,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "operator",
                        "nameLocation": "819:8:15",
                        "nodeType": "VariableDeclaration",
                        "scope": 3081,
                        "src": "803:24:15",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3068,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "803:7:15",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3071,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "853:4:15",
                        "nodeType": "VariableDeclaration",
                        "scope": 3081,
                        "src": "837:20:15",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3070,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "837:7:15",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3073,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "883:2:15",
                        "nodeType": "VariableDeclaration",
                        "scope": 3081,
                        "src": "867:18:15",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3072,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "867:7:15",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3076,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "ids",
                        "nameLocation": "905:3:15",
                        "nodeType": "VariableDeclaration",
                        "scope": 3081,
                        "src": "895:13:15",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 3074,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "895:7:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 3075,
                          "nodeType": "ArrayTypeName",
                          "src": "895:9:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                            "typeString": "uint256[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3079,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "values",
                        "nameLocation": "928:6:15",
                        "nodeType": "VariableDeclaration",
                        "scope": 3081,
                        "src": "918:16:15",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 3077,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "918:7:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 3078,
                          "nodeType": "ArrayTypeName",
                          "src": "918:9:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                            "typeString": "uint256[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "793:147:15"
                  },
                  "src": "774:167:15"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3082,
                    "nodeType": "StructuredDocumentation",
                    "src": "947:147:15",
                    "text": " @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\n `approved`."
                  },
                  "eventSelector": "17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31",
                  "id": 3090,
                  "name": "ApprovalForAll",
                  "nameLocation": "1105:14:15",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3089,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3084,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "account",
                        "nameLocation": "1136:7:15",
                        "nodeType": "VariableDeclaration",
                        "scope": 3090,
                        "src": "1120:23:15",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3083,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1120:7:15",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3086,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "operator",
                        "nameLocation": "1161:8:15",
                        "nodeType": "VariableDeclaration",
                        "scope": 3090,
                        "src": "1145:24:15",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3085,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1145:7:15",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3088,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "approved",
                        "nameLocation": "1176:8:15",
                        "nodeType": "VariableDeclaration",
                        "scope": 3090,
                        "src": "1171:13:15",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3087,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "1171:4:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1119:66:15"
                  },
                  "src": "1099:87:15"
                },
                {
                  "anonymous": false,
                  "documentation": {
                    "id": 3091,
                    "nodeType": "StructuredDocumentation",
                    "src": "1192:343:15",
                    "text": " @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\n If an {URI} event was emitted for `id`, the standard\n https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\n returned by {IERC1155MetadataURI-uri}."
                  },
                  "eventSelector": "6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b",
                  "id": 3097,
                  "name": "URI",
                  "nameLocation": "1546:3:15",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 3096,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3093,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "1557:5:15",
                        "nodeType": "VariableDeclaration",
                        "scope": 3097,
                        "src": "1550:12:15",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 3092,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "1550:6:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3095,
                        "indexed": true,
                        "mutability": "mutable",
                        "name": "id",
                        "nameLocation": "1580:2:15",
                        "nodeType": "VariableDeclaration",
                        "scope": 3097,
                        "src": "1564:18:15",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3094,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1564:7:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1549:34:15"
                  },
                  "src": "1540:44:15"
                },
                {
                  "documentation": {
                    "id": 3098,
                    "nodeType": "StructuredDocumentation",
                    "src": "1590:90:15",
                    "text": " @dev Returns the value of tokens of token type `id` owned by `account`."
                  },
                  "functionSelector": "00fdd58e",
                  "id": 3107,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "balanceOf",
                  "nameLocation": "1694:9:15",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3103,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3100,
                        "mutability": "mutable",
                        "name": "account",
                        "nameLocation": "1712:7:15",
                        "nodeType": "VariableDeclaration",
                        "scope": 3107,
                        "src": "1704:15:15",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3099,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1704:7:15",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3102,
                        "mutability": "mutable",
                        "name": "id",
                        "nameLocation": "1729:2:15",
                        "nodeType": "VariableDeclaration",
                        "scope": 3107,
                        "src": "1721:10:15",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3101,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1721:7:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1703:29:15"
                  },
                  "returnParameters": {
                    "id": 3106,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3105,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 3107,
                        "src": "1756:7:15",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3104,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1756:7:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1755:9:15"
                  },
                  "scope": 3169,
                  "src": "1685:80:15",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 3108,
                    "nodeType": "StructuredDocumentation",
                    "src": "1771:188:15",
                    "text": " @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\n Requirements:\n - `accounts` and `ids` must have the same length."
                  },
                  "functionSelector": "4e1273f4",
                  "id": 3120,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "balanceOfBatch",
                  "nameLocation": "1973:14:15",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3115,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3111,
                        "mutability": "mutable",
                        "name": "accounts",
                        "nameLocation": "2016:8:15",
                        "nodeType": "VariableDeclaration",
                        "scope": 3120,
                        "src": "1997:27:15",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 3109,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "1997:7:15",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 3110,
                          "nodeType": "ArrayTypeName",
                          "src": "1997:9:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                            "typeString": "address[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3114,
                        "mutability": "mutable",
                        "name": "ids",
                        "nameLocation": "2053:3:15",
                        "nodeType": "VariableDeclaration",
                        "scope": 3120,
                        "src": "2034:22:15",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 3112,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "2034:7:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 3113,
                          "nodeType": "ArrayTypeName",
                          "src": "2034:9:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                            "typeString": "uint256[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1987:75:15"
                  },
                  "returnParameters": {
                    "id": 3119,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3118,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 3120,
                        "src": "2086:16:15",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 3116,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "2086:7:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 3117,
                          "nodeType": "ArrayTypeName",
                          "src": "2086:9:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                            "typeString": "uint256[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2085:18:15"
                  },
                  "scope": 3169,
                  "src": "1964:140:15",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 3121,
                    "nodeType": "StructuredDocumentation",
                    "src": "2110:254:15",
                    "text": " @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\n Emits an {ApprovalForAll} event.\n Requirements:\n - `operator` cannot be the zero address."
                  },
                  "functionSelector": "a22cb465",
                  "id": 3128,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setApprovalForAll",
                  "nameLocation": "2378:17:15",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3126,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3123,
                        "mutability": "mutable",
                        "name": "operator",
                        "nameLocation": "2404:8:15",
                        "nodeType": "VariableDeclaration",
                        "scope": 3128,
                        "src": "2396:16:15",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3122,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2396:7:15",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3125,
                        "mutability": "mutable",
                        "name": "approved",
                        "nameLocation": "2419:8:15",
                        "nodeType": "VariableDeclaration",
                        "scope": 3128,
                        "src": "2414:13:15",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3124,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "2414:4:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2395:33:15"
                  },
                  "returnParameters": {
                    "id": 3127,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2437:0:15"
                  },
                  "scope": 3169,
                  "src": "2369:69:15",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 3129,
                    "nodeType": "StructuredDocumentation",
                    "src": "2444:135:15",
                    "text": " @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\n See {setApprovalForAll}."
                  },
                  "functionSelector": "e985e9c5",
                  "id": 3138,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "isApprovedForAll",
                  "nameLocation": "2593:16:15",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3134,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3131,
                        "mutability": "mutable",
                        "name": "account",
                        "nameLocation": "2618:7:15",
                        "nodeType": "VariableDeclaration",
                        "scope": 3138,
                        "src": "2610:15:15",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3130,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2610:7:15",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3133,
                        "mutability": "mutable",
                        "name": "operator",
                        "nameLocation": "2635:8:15",
                        "nodeType": "VariableDeclaration",
                        "scope": 3138,
                        "src": "2627:16:15",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3132,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2627:7:15",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2609:35:15"
                  },
                  "returnParameters": {
                    "id": 3137,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3136,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 3138,
                        "src": "2668:4:15",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3135,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "2668:4:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2667:6:15"
                  },
                  "scope": 3169,
                  "src": "2584:90:15",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 3139,
                    "nodeType": "StructuredDocumentation",
                    "src": "2680:927:15",
                    "text": " @dev Transfers a `value` amount of tokens of type `id` from `from` to `to`.\n WARNING: This function can potentially allow a reentrancy attack when transferring tokens\n to an untrusted contract, when invoking {IERC1155Receiver-onERC1155Received} on the receiver.\n Ensure to follow the checks-effects-interactions pattern and consider employing\n reentrancy guards when interacting with untrusted contracts.\n Emits a {TransferSingle} event.\n Requirements:\n - `to` cannot be the zero address.\n - If the caller is not `from`, it must have been approved to spend ``from``'s tokens via {setApprovalForAll}.\n - `from` must have a balance of tokens of type `id` of at least `value` amount.\n - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\n acceptance magic value."
                  },
                  "functionSelector": "f242432a",
                  "id": 3152,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "safeTransferFrom",
                  "nameLocation": "3621:16:15",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3150,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3141,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "3646:4:15",
                        "nodeType": "VariableDeclaration",
                        "scope": 3152,
                        "src": "3638:12:15",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3140,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3638:7:15",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3143,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "3660:2:15",
                        "nodeType": "VariableDeclaration",
                        "scope": 3152,
                        "src": "3652:10:15",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3142,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3652:7:15",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3145,
                        "mutability": "mutable",
                        "name": "id",
                        "nameLocation": "3672:2:15",
                        "nodeType": "VariableDeclaration",
                        "scope": 3152,
                        "src": "3664:10:15",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3144,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3664:7:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3147,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "3684:5:15",
                        "nodeType": "VariableDeclaration",
                        "scope": 3152,
                        "src": "3676:13:15",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3146,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3676:7:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3149,
                        "mutability": "mutable",
                        "name": "data",
                        "nameLocation": "3706:4:15",
                        "nodeType": "VariableDeclaration",
                        "scope": 3152,
                        "src": "3691:19:15",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 3148,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "3691:5:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3637:74:15"
                  },
                  "returnParameters": {
                    "id": 3151,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3720:0:15"
                  },
                  "scope": 3169,
                  "src": "3612:109:15",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 3153,
                    "nodeType": "StructuredDocumentation",
                    "src": "3727:831:15",
                    "text": " @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\n WARNING: This function can potentially allow a reentrancy attack when transferring tokens\n to an untrusted contract, when invoking {IERC1155Receiver-onERC1155BatchReceived} on the receiver.\n Ensure to follow the checks-effects-interactions pattern and consider employing\n reentrancy guards when interacting with untrusted contracts.\n Emits either a {TransferSingle} or a {TransferBatch} event, depending on the length of the array arguments.\n Requirements:\n - `ids` and `values` must have the same length.\n - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\n acceptance magic value."
                  },
                  "functionSelector": "2eb2c2d6",
                  "id": 3168,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "safeBatchTransferFrom",
                  "nameLocation": "4572:21:15",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3166,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3155,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "4611:4:15",
                        "nodeType": "VariableDeclaration",
                        "scope": 3168,
                        "src": "4603:12:15",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3154,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4603:7:15",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3157,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "4633:2:15",
                        "nodeType": "VariableDeclaration",
                        "scope": 3168,
                        "src": "4625:10:15",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3156,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4625:7:15",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3160,
                        "mutability": "mutable",
                        "name": "ids",
                        "nameLocation": "4664:3:15",
                        "nodeType": "VariableDeclaration",
                        "scope": 3168,
                        "src": "4645:22:15",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 3158,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "4645:7:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 3159,
                          "nodeType": "ArrayTypeName",
                          "src": "4645:9:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                            "typeString": "uint256[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3163,
                        "mutability": "mutable",
                        "name": "values",
                        "nameLocation": "4696:6:15",
                        "nodeType": "VariableDeclaration",
                        "scope": 3168,
                        "src": "4677:25:15",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 3161,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "4677:7:15",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 3162,
                          "nodeType": "ArrayTypeName",
                          "src": "4677:9:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                            "typeString": "uint256[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3165,
                        "mutability": "mutable",
                        "name": "data",
                        "nameLocation": "4727:4:15",
                        "nodeType": "VariableDeclaration",
                        "scope": 3168,
                        "src": "4712:19:15",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 3164,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "4712:5:15",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4593:144:15"
                  },
                  "returnParameters": {
                    "id": 3167,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "4746:0:15"
                  },
                  "scope": 3169,
                  "src": "4563:184:15",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 3170,
              "src": "337:4412:15",
              "usedErrors": [],
              "usedEvents": [
                3066,
                3081,
                3090,
                3097
              ]
            }
          ],
          "src": "110:4640:15"
        },
        "id": 15
      },
      "@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol",
          "exportedSymbols": {
            "IERC1155Receiver": [
              3211
            ],
            "IERC165": [
              6393
            ]
          },
          "id": 3212,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 3171,
              "literals": [
                "solidity",
                ">=",
                "0.6",
                ".2"
              ],
              "nodeType": "PragmaDirective",
              "src": "118:24:16"
            },
            {
              "absolutePath": "@openzeppelin/contracts/utils/introspection/IERC165.sol",
              "file": "../../utils/introspection/IERC165.sol",
              "id": 3173,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 3212,
              "sourceUnit": 6394,
              "src": "144:62:16",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 3172,
                    "name": "IERC165",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 6393,
                    "src": "152:7:16",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 3175,
                    "name": "IERC165",
                    "nameLocations": [
                      "357:7:16"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 6393,
                    "src": "357:7:16"
                  },
                  "id": 3176,
                  "nodeType": "InheritanceSpecifier",
                  "src": "357:7:16"
                }
              ],
              "canonicalName": "IERC1155Receiver",
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 3174,
                "nodeType": "StructuredDocumentation",
                "src": "208:118:16",
                "text": " @dev Interface that must be implemented by smart contracts in order to receive\n ERC-1155 token transfers."
              },
              "fullyImplemented": false,
              "id": 3211,
              "linearizedBaseContracts": [
                3211,
                6393
              ],
              "name": "IERC1155Receiver",
              "nameLocation": "337:16:16",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "documentation": {
                    "id": 3177,
                    "nodeType": "StructuredDocumentation",
                    "src": "371:827:16",
                    "text": " @dev Handles the receipt of a single ERC-1155 token type. This function is\n called at the end of a `safeTransferFrom` after the balance has been updated.\n NOTE: To accept the transfer, this must return\n `bytes4(keccak256(\"onERC1155Received(address,address,uint256,uint256,bytes)\"))`\n (i.e. 0xf23a6e61, or its own function selector).\n @param operator The address which initiated the transfer (i.e. msg.sender)\n @param from The address which previously owned the token\n @param id The ID of the token being transferred\n @param value The amount of tokens being transferred\n @param data Additional data with no specified format\n @return `bytes4(keccak256(\"onERC1155Received(address,address,uint256,uint256,bytes)\"))` if transfer is allowed"
                  },
                  "functionSelector": "f23a6e61",
                  "id": 3192,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "onERC1155Received",
                  "nameLocation": "1212:17:16",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3188,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3179,
                        "mutability": "mutable",
                        "name": "operator",
                        "nameLocation": "1247:8:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 3192,
                        "src": "1239:16:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3178,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1239:7:16",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3181,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "1273:4:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 3192,
                        "src": "1265:12:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3180,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1265:7:16",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3183,
                        "mutability": "mutable",
                        "name": "id",
                        "nameLocation": "1295:2:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 3192,
                        "src": "1287:10:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3182,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1287:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3185,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "1315:5:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 3192,
                        "src": "1307:13:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3184,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1307:7:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3187,
                        "mutability": "mutable",
                        "name": "data",
                        "nameLocation": "1345:4:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 3192,
                        "src": "1330:19:16",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 3186,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "1330:5:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1229:126:16"
                  },
                  "returnParameters": {
                    "id": 3191,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3190,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 3192,
                        "src": "1374:6:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "typeName": {
                          "id": 3189,
                          "name": "bytes4",
                          "nodeType": "ElementaryTypeName",
                          "src": "1374:6:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1373:8:16"
                  },
                  "scope": 3211,
                  "src": "1203:179:16",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "documentation": {
                    "id": 3193,
                    "nodeType": "StructuredDocumentation",
                    "src": "1388:995:16",
                    "text": " @dev Handles the receipt of a multiple ERC-1155 token types. This function\n is called at the end of a `safeBatchTransferFrom` after the balances have\n been updated.\n NOTE: To accept the transfer(s), this must return\n `bytes4(keccak256(\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\"))`\n (i.e. 0xbc197c81, or its own function selector).\n @param operator The address which initiated the batch transfer (i.e. msg.sender)\n @param from The address which previously owned the token\n @param ids An array containing ids of each token being transferred (order and length must match values array)\n @param values An array containing amounts of each token being transferred (order and length must match ids array)\n @param data Additional data with no specified format\n @return `bytes4(keccak256(\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\"))` if transfer is allowed"
                  },
                  "functionSelector": "bc197c81",
                  "id": 3210,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "onERC1155BatchReceived",
                  "nameLocation": "2397:22:16",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3206,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3195,
                        "mutability": "mutable",
                        "name": "operator",
                        "nameLocation": "2437:8:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 3210,
                        "src": "2429:16:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3194,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2429:7:16",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3197,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "2463:4:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 3210,
                        "src": "2455:12:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3196,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2455:7:16",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3200,
                        "mutability": "mutable",
                        "name": "ids",
                        "nameLocation": "2496:3:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 3210,
                        "src": "2477:22:16",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 3198,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "2477:7:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 3199,
                          "nodeType": "ArrayTypeName",
                          "src": "2477:9:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                            "typeString": "uint256[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3203,
                        "mutability": "mutable",
                        "name": "values",
                        "nameLocation": "2528:6:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 3210,
                        "src": "2509:25:16",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 3201,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "2509:7:16",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 3202,
                          "nodeType": "ArrayTypeName",
                          "src": "2509:9:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                            "typeString": "uint256[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3205,
                        "mutability": "mutable",
                        "name": "data",
                        "nameLocation": "2559:4:16",
                        "nodeType": "VariableDeclaration",
                        "scope": 3210,
                        "src": "2544:19:16",
                        "stateVariable": false,
                        "storageLocation": "calldata",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 3204,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "2544:5:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2419:150:16"
                  },
                  "returnParameters": {
                    "id": 3209,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3208,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 3210,
                        "src": "2588:6:16",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "typeName": {
                          "id": 3207,
                          "name": "bytes4",
                          "nodeType": "ElementaryTypeName",
                          "src": "2588:6:16",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2587:8:16"
                  },
                  "scope": 3211,
                  "src": "2388:208:16",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 3212,
              "src": "327:2271:16",
              "usedErrors": [],
              "usedEvents": []
            }
          ],
          "src": "118:2481:16"
        },
        "id": 16
      },
      "@openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol",
          "exportedSymbols": {
            "IERC1155": [
              3169
            ],
            "IERC1155MetadataURI": [
              3227
            ]
          },
          "id": 3228,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 3213,
              "literals": [
                "solidity",
                ">=",
                "0.6",
                ".2"
              ],
              "nodeType": "PragmaDirective",
              "src": "132:24:17"
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC1155/IERC1155.sol",
              "file": "../IERC1155.sol",
              "id": 3215,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 3228,
              "sourceUnit": 3170,
              "src": "158:41:17",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 3214,
                    "name": "IERC1155",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3169,
                    "src": "166:8:17",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 3217,
                    "name": "IERC1155",
                    "nameLocations": [
                      "399:8:17"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 3169,
                    "src": "399:8:17"
                  },
                  "id": 3218,
                  "nodeType": "InheritanceSpecifier",
                  "src": "399:8:17"
                }
              ],
              "canonicalName": "IERC1155MetadataURI",
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 3216,
                "nodeType": "StructuredDocumentation",
                "src": "201:164:17",
                "text": " @dev Interface of the optional ERC1155MetadataExtension interface, as defined\n in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[ERC]."
              },
              "fullyImplemented": false,
              "id": 3227,
              "linearizedBaseContracts": [
                3227,
                3169,
                6393
              ],
              "name": "IERC1155MetadataURI",
              "nameLocation": "376:19:17",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "documentation": {
                    "id": 3219,
                    "nodeType": "StructuredDocumentation",
                    "src": "414:192:17",
                    "text": " @dev Returns the URI for token type `id`.\n If the `\\{id\\}` substring is present in the URI, it must be replaced by\n clients with the actual token type ID."
                  },
                  "functionSelector": "0e89341c",
                  "id": 3226,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "uri",
                  "nameLocation": "620:3:17",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3222,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3221,
                        "mutability": "mutable",
                        "name": "id",
                        "nameLocation": "632:2:17",
                        "nodeType": "VariableDeclaration",
                        "scope": 3226,
                        "src": "624:10:17",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3220,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "624:7:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "623:12:17"
                  },
                  "returnParameters": {
                    "id": 3225,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3224,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 3226,
                        "src": "659:13:17",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 3223,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "659:6:17",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "658:15:17"
                  },
                  "scope": 3227,
                  "src": "611:63:17",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 3228,
              "src": "366:310:17",
              "usedErrors": [],
              "usedEvents": [
                3066,
                3081,
                3090,
                3097
              ]
            }
          ],
          "src": "132:545:17"
        },
        "id": 17
      },
      "@openzeppelin/contracts/token/ERC1155/utils/ERC1155Utils.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/token/ERC1155/utils/ERC1155Utils.sol",
          "exportedSymbols": {
            "ERC1155Utils": [
              3381
            ],
            "IERC1155Errors": [
              2742
            ],
            "IERC1155Receiver": [
              3211
            ]
          },
          "id": 3382,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 3229,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".20"
              ],
              "nodeType": "PragmaDirective",
              "src": "120:24:18"
            },
            {
              "absolutePath": "@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol",
              "file": "../IERC1155Receiver.sol",
              "id": 3231,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 3382,
              "sourceUnit": 3212,
              "src": "146:57:18",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 3230,
                    "name": "IERC1155Receiver",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3211,
                    "src": "154:16:18",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/interfaces/draft-IERC6093.sol",
              "file": "../../../interfaces/draft-IERC6093.sol",
              "id": 3233,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 3382,
              "sourceUnit": 2743,
              "src": "204:70:18",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 3232,
                    "name": "IERC1155Errors",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2742,
                    "src": "212:14:18",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [],
              "canonicalName": "ERC1155Utils",
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 3234,
                "nodeType": "StructuredDocumentation",
                "src": "276:162:18",
                "text": " @dev Library that provide common ERC-1155 utility functions.\n See https://eips.ethereum.org/EIPS/eip-1155[ERC-1155].\n _Available since v5.1._"
              },
              "fullyImplemented": true,
              "id": 3381,
              "linearizedBaseContracts": [
                3381
              ],
              "name": "ERC1155Utils",
              "nameLocation": "447:12:18",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 3305,
                    "nodeType": "Block",
                    "src": "1191:776:18",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 3254,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "expression": {
                                "id": 3250,
                                "name": "to",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3241,
                                "src": "1205:2:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "id": 3251,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "1208:4:18",
                              "memberName": "code",
                              "nodeType": "MemberAccess",
                              "src": "1205:7:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 3252,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "1213:6:18",
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "1205:14:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 3253,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1222:1:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "1205:18:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 3304,
                        "nodeType": "IfStatement",
                        "src": "1201:760:18",
                        "trueBody": {
                          "id": 3303,
                          "nodeType": "Block",
                          "src": "1225:736:18",
                          "statements": [
                            {
                              "clauses": [
                                {
                                  "block": {
                                    "id": 3281,
                                    "nodeType": "Block",
                                    "src": "1341:221:18",
                                    "statements": [
                                      {
                                        "condition": {
                                          "commonType": {
                                            "typeIdentifier": "t_bytes4",
                                            "typeString": "bytes4"
                                          },
                                          "id": 3272,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "id": 3268,
                                            "name": "response",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3266,
                                            "src": "1363:8:18",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_bytes4",
                                              "typeString": "bytes4"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "!=",
                                          "rightExpression": {
                                            "expression": {
                                              "expression": {
                                                "id": 3269,
                                                "name": "IERC1155Receiver",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3211,
                                                "src": "1375:16:18",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_type$_t_contract$_IERC1155Receiver_$3211_$",
                                                  "typeString": "type(contract IERC1155Receiver)"
                                                }
                                              },
                                              "id": 3270,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "memberLocation": "1392:17:18",
                                              "memberName": "onERC1155Received",
                                              "nodeType": "MemberAccess",
                                              "referencedDeclaration": 3192,
                                              "src": "1375:34:18",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_function_declaration_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_bytes_calldata_ptr_$returns$_t_bytes4_$",
                                                "typeString": "function IERC1155Receiver.onERC1155Received(address,address,uint256,uint256,bytes calldata) returns (bytes4)"
                                              }
                                            },
                                            "id": 3271,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "memberLocation": "1410:8:18",
                                            "memberName": "selector",
                                            "nodeType": "MemberAccess",
                                            "src": "1375:43:18",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_bytes4",
                                              "typeString": "bytes4"
                                            }
                                          },
                                          "src": "1363:55:18",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                          }
                                        },
                                        "id": 3280,
                                        "nodeType": "IfStatement",
                                        "src": "1359:189:18",
                                        "trueBody": {
                                          "id": 3279,
                                          "nodeType": "Block",
                                          "src": "1420:128:18",
                                          "statements": [
                                            {
                                              "errorCall": {
                                                "arguments": [
                                                  {
                                                    "id": 3276,
                                                    "name": "to",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 3241,
                                                    "src": "1526:2:18",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_address",
                                                      "typeString": "address"
                                                    }
                                                  }
                                                ],
                                                "expression": {
                                                  "argumentTypes": [
                                                    {
                                                      "typeIdentifier": "t_address",
                                                      "typeString": "address"
                                                    }
                                                  ],
                                                  "expression": {
                                                    "id": 3273,
                                                    "name": "IERC1155Errors",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 2742,
                                                    "src": "1488:14:18",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_type$_t_contract$_IERC1155Errors_$2742_$",
                                                      "typeString": "type(contract IERC1155Errors)"
                                                    }
                                                  },
                                                  "id": 3275,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "memberLocation": "1503:22:18",
                                                  "memberName": "ERC1155InvalidReceiver",
                                                  "nodeType": "MemberAccess",
                                                  "referencedDeclaration": 2717,
                                                  "src": "1488:37:18",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$",
                                                    "typeString": "function (address) pure returns (error)"
                                                  }
                                                },
                                                "id": 3277,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "nameLocations": [],
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "1488:41:18",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_error",
                                                  "typeString": "error"
                                                }
                                              },
                                              "id": 3278,
                                              "nodeType": "RevertStatement",
                                              "src": "1481:48:18"
                                            }
                                          ]
                                        }
                                      }
                                    ]
                                  },
                                  "errorName": "",
                                  "id": 3282,
                                  "nodeType": "TryCatchClause",
                                  "parameters": {
                                    "id": 3267,
                                    "nodeType": "ParameterList",
                                    "parameters": [
                                      {
                                        "constant": false,
                                        "id": 3266,
                                        "mutability": "mutable",
                                        "name": "response",
                                        "nameLocation": "1331:8:18",
                                        "nodeType": "VariableDeclaration",
                                        "scope": 3282,
                                        "src": "1324:15:18",
                                        "stateVariable": false,
                                        "storageLocation": "default",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes4",
                                          "typeString": "bytes4"
                                        },
                                        "typeName": {
                                          "id": 3265,
                                          "name": "bytes4",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "1324:6:18",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes4",
                                            "typeString": "bytes4"
                                          }
                                        },
                                        "visibility": "internal"
                                      }
                                    ],
                                    "src": "1323:17:18"
                                  },
                                  "src": "1315:247:18"
                                },
                                {
                                  "block": {
                                    "id": 3300,
                                    "nodeType": "Block",
                                    "src": "1591:360:18",
                                    "statements": [
                                      {
                                        "condition": {
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 3289,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "expression": {
                                              "id": 3286,
                                              "name": "reason",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 3284,
                                              "src": "1613:6:18",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                "typeString": "bytes memory"
                                              }
                                            },
                                            "id": 3287,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberLocation": "1620:6:18",
                                            "memberName": "length",
                                            "nodeType": "MemberAccess",
                                            "src": "1613:13:18",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "==",
                                          "rightExpression": {
                                            "hexValue": "30",
                                            "id": 3288,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "1630:1:18",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_0_by_1",
                                              "typeString": "int_const 0"
                                            },
                                            "value": "0"
                                          },
                                          "src": "1613:18:18",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                          }
                                        },
                                        "falseBody": {
                                          "id": 3298,
                                          "nodeType": "Block",
                                          "src": "1784:153:18",
                                          "statements": [
                                            {
                                              "AST": {
                                                "nativeSrc": "1831:88:18",
                                                "nodeType": "YulBlock",
                                                "src": "1831:88:18",
                                                "statements": [
                                                  {
                                                    "expression": {
                                                      "arguments": [
                                                        {
                                                          "arguments": [
                                                            {
                                                              "name": "reason",
                                                              "nativeSrc": "1868:6:18",
                                                              "nodeType": "YulIdentifier",
                                                              "src": "1868:6:18"
                                                            },
                                                            {
                                                              "kind": "number",
                                                              "nativeSrc": "1876:4:18",
                                                              "nodeType": "YulLiteral",
                                                              "src": "1876:4:18",
                                                              "type": "",
                                                              "value": "0x20"
                                                            }
                                                          ],
                                                          "functionName": {
                                                            "name": "add",
                                                            "nativeSrc": "1864:3:18",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "1864:3:18"
                                                          },
                                                          "nativeSrc": "1864:17:18",
                                                          "nodeType": "YulFunctionCall",
                                                          "src": "1864:17:18"
                                                        },
                                                        {
                                                          "arguments": [
                                                            {
                                                              "name": "reason",
                                                              "nativeSrc": "1889:6:18",
                                                              "nodeType": "YulIdentifier",
                                                              "src": "1889:6:18"
                                                            }
                                                          ],
                                                          "functionName": {
                                                            "name": "mload",
                                                            "nativeSrc": "1883:5:18",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "1883:5:18"
                                                          },
                                                          "nativeSrc": "1883:13:18",
                                                          "nodeType": "YulFunctionCall",
                                                          "src": "1883:13:18"
                                                        }
                                                      ],
                                                      "functionName": {
                                                        "name": "revert",
                                                        "nativeSrc": "1857:6:18",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "1857:6:18"
                                                      },
                                                      "nativeSrc": "1857:40:18",
                                                      "nodeType": "YulFunctionCall",
                                                      "src": "1857:40:18"
                                                    },
                                                    "nativeSrc": "1857:40:18",
                                                    "nodeType": "YulExpressionStatement",
                                                    "src": "1857:40:18"
                                                  }
                                                ]
                                              },
                                              "evmVersion": "paris",
                                              "externalReferences": [
                                                {
                                                  "declaration": 3284,
                                                  "isOffset": false,
                                                  "isSlot": false,
                                                  "src": "1868:6:18",
                                                  "valueSize": 1
                                                },
                                                {
                                                  "declaration": 3284,
                                                  "isOffset": false,
                                                  "isSlot": false,
                                                  "src": "1889:6:18",
                                                  "valueSize": 1
                                                }
                                              ],
                                              "flags": [
                                                "memory-safe"
                                              ],
                                              "id": 3297,
                                              "nodeType": "InlineAssembly",
                                              "src": "1806:113:18"
                                            }
                                          ]
                                        },
                                        "id": 3299,
                                        "nodeType": "IfStatement",
                                        "src": "1609:328:18",
                                        "trueBody": {
                                          "id": 3296,
                                          "nodeType": "Block",
                                          "src": "1633:145:18",
                                          "statements": [
                                            {
                                              "errorCall": {
                                                "arguments": [
                                                  {
                                                    "id": 3293,
                                                    "name": "to",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 3241,
                                                    "src": "1756:2:18",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_address",
                                                      "typeString": "address"
                                                    }
                                                  }
                                                ],
                                                "expression": {
                                                  "argumentTypes": [
                                                    {
                                                      "typeIdentifier": "t_address",
                                                      "typeString": "address"
                                                    }
                                                  ],
                                                  "expression": {
                                                    "id": 3290,
                                                    "name": "IERC1155Errors",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 2742,
                                                    "src": "1718:14:18",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_type$_t_contract$_IERC1155Errors_$2742_$",
                                                      "typeString": "type(contract IERC1155Errors)"
                                                    }
                                                  },
                                                  "id": 3292,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "memberLocation": "1733:22:18",
                                                  "memberName": "ERC1155InvalidReceiver",
                                                  "nodeType": "MemberAccess",
                                                  "referencedDeclaration": 2717,
                                                  "src": "1718:37:18",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$",
                                                    "typeString": "function (address) pure returns (error)"
                                                  }
                                                },
                                                "id": 3294,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "nameLocations": [],
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "1718:41:18",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_error",
                                                  "typeString": "error"
                                                }
                                              },
                                              "id": 3295,
                                              "nodeType": "RevertStatement",
                                              "src": "1711:48:18"
                                            }
                                          ]
                                        }
                                      }
                                    ]
                                  },
                                  "errorName": "",
                                  "id": 3301,
                                  "nodeType": "TryCatchClause",
                                  "parameters": {
                                    "id": 3285,
                                    "nodeType": "ParameterList",
                                    "parameters": [
                                      {
                                        "constant": false,
                                        "id": 3284,
                                        "mutability": "mutable",
                                        "name": "reason",
                                        "nameLocation": "1583:6:18",
                                        "nodeType": "VariableDeclaration",
                                        "scope": 3301,
                                        "src": "1570:19:18",
                                        "stateVariable": false,
                                        "storageLocation": "memory",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes"
                                        },
                                        "typeName": {
                                          "id": 3283,
                                          "name": "bytes",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "1570:5:18",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                          }
                                        },
                                        "visibility": "internal"
                                      }
                                    ],
                                    "src": "1569:21:18"
                                  },
                                  "src": "1563:388:18"
                                }
                              ],
                              "externalCall": {
                                "arguments": [
                                  {
                                    "id": 3259,
                                    "name": "operator",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3237,
                                    "src": "1282:8:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "id": 3260,
                                    "name": "from",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3239,
                                    "src": "1292:4:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "id": 3261,
                                    "name": "id",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3243,
                                    "src": "1298:2:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "id": 3262,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3245,
                                    "src": "1302:5:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "id": 3263,
                                    "name": "data",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3247,
                                    "src": "1309:4:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  ],
                                  "expression": {
                                    "arguments": [
                                      {
                                        "id": 3256,
                                        "name": "to",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3241,
                                        "src": "1260:2:18",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "id": 3255,
                                      "name": "IERC1155Receiver",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3211,
                                      "src": "1243:16:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_IERC1155Receiver_$3211_$",
                                        "typeString": "type(contract IERC1155Receiver)"
                                      }
                                    },
                                    "id": 3257,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "1243:20:18",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IERC1155Receiver_$3211",
                                      "typeString": "contract IERC1155Receiver"
                                    }
                                  },
                                  "id": 3258,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "1264:17:18",
                                  "memberName": "onERC1155Received",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3192,
                                  "src": "1243:38:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bytes4_$",
                                    "typeString": "function (address,address,uint256,uint256,bytes memory) external returns (bytes4)"
                                  }
                                },
                                "id": 3264,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1243:71:18",
                                "tryCall": true,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              },
                              "id": 3302,
                              "nodeType": "TryStatement",
                              "src": "1239:712:18"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3235,
                    "nodeType": "StructuredDocumentation",
                    "src": "466:535:18",
                    "text": " @dev Performs an acceptance check for the provided `operator` by calling {IERC1155Receiver-onERC1155Received}\n on the `to` address. The `operator` is generally the address that initiated the token transfer (i.e. `msg.sender`).\n The acceptance call is not executed and treated as a no-op if the target address doesn't contain code (i.e. an EOA).\n Otherwise, the recipient must implement {IERC1155Receiver-onERC1155Received} and return the acceptance magic value to accept\n the transfer."
                  },
                  "id": 3306,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "checkOnERC1155Received",
                  "nameLocation": "1015:22:18",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3248,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3237,
                        "mutability": "mutable",
                        "name": "operator",
                        "nameLocation": "1055:8:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 3306,
                        "src": "1047:16:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3236,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1047:7:18",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3239,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "1081:4:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 3306,
                        "src": "1073:12:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3238,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1073:7:18",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3241,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "1103:2:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 3306,
                        "src": "1095:10:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3240,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1095:7:18",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3243,
                        "mutability": "mutable",
                        "name": "id",
                        "nameLocation": "1123:2:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 3306,
                        "src": "1115:10:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3242,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1115:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3245,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "1143:5:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 3306,
                        "src": "1135:13:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3244,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1135:7:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3247,
                        "mutability": "mutable",
                        "name": "data",
                        "nameLocation": "1171:4:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 3306,
                        "src": "1158:17:18",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 3246,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "1158:5:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1037:144:18"
                  },
                  "returnParameters": {
                    "id": 3249,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1191:0:18"
                  },
                  "scope": 3381,
                  "src": "1006:961:18",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 3379,
                    "nodeType": "Block",
                    "src": "2733:818:18",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 3328,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "expression": {
                                "id": 3324,
                                "name": "to",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3313,
                                "src": "2747:2:18",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "id": 3325,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "2750:4:18",
                              "memberName": "code",
                              "nodeType": "MemberAccess",
                              "src": "2747:7:18",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 3326,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "2755:6:18",
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "2747:14:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 3327,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2764:1:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "2747:18:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 3378,
                        "nodeType": "IfStatement",
                        "src": "2743:802:18",
                        "trueBody": {
                          "id": 3377,
                          "nodeType": "Block",
                          "src": "2767:778:18",
                          "statements": [
                            {
                              "clauses": [
                                {
                                  "block": {
                                    "id": 3355,
                                    "nodeType": "Block",
                                    "src": "2920:226:18",
                                    "statements": [
                                      {
                                        "condition": {
                                          "commonType": {
                                            "typeIdentifier": "t_bytes4",
                                            "typeString": "bytes4"
                                          },
                                          "id": 3346,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "id": 3342,
                                            "name": "response",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3340,
                                            "src": "2942:8:18",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_bytes4",
                                              "typeString": "bytes4"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "!=",
                                          "rightExpression": {
                                            "expression": {
                                              "expression": {
                                                "id": 3343,
                                                "name": "IERC1155Receiver",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 3211,
                                                "src": "2954:16:18",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_type$_t_contract$_IERC1155Receiver_$3211_$",
                                                  "typeString": "type(contract IERC1155Receiver)"
                                                }
                                              },
                                              "id": 3344,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "memberLocation": "2971:22:18",
                                              "memberName": "onERC1155BatchReceived",
                                              "nodeType": "MemberAccess",
                                              "referencedDeclaration": 3210,
                                              "src": "2954:39:18",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_function_declaration_nonpayable$_t_address_$_t_address_$_t_array$_t_uint256_$dyn_calldata_ptr_$_t_array$_t_uint256_$dyn_calldata_ptr_$_t_bytes_calldata_ptr_$returns$_t_bytes4_$",
                                                "typeString": "function IERC1155Receiver.onERC1155BatchReceived(address,address,uint256[] calldata,uint256[] calldata,bytes calldata) returns (bytes4)"
                                              }
                                            },
                                            "id": 3345,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "memberLocation": "2994:8:18",
                                            "memberName": "selector",
                                            "nodeType": "MemberAccess",
                                            "src": "2954:48:18",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_bytes4",
                                              "typeString": "bytes4"
                                            }
                                          },
                                          "src": "2942:60:18",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                          }
                                        },
                                        "id": 3354,
                                        "nodeType": "IfStatement",
                                        "src": "2938:194:18",
                                        "trueBody": {
                                          "id": 3353,
                                          "nodeType": "Block",
                                          "src": "3004:128:18",
                                          "statements": [
                                            {
                                              "errorCall": {
                                                "arguments": [
                                                  {
                                                    "id": 3350,
                                                    "name": "to",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 3313,
                                                    "src": "3110:2:18",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_address",
                                                      "typeString": "address"
                                                    }
                                                  }
                                                ],
                                                "expression": {
                                                  "argumentTypes": [
                                                    {
                                                      "typeIdentifier": "t_address",
                                                      "typeString": "address"
                                                    }
                                                  ],
                                                  "expression": {
                                                    "id": 3347,
                                                    "name": "IERC1155Errors",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 2742,
                                                    "src": "3072:14:18",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_type$_t_contract$_IERC1155Errors_$2742_$",
                                                      "typeString": "type(contract IERC1155Errors)"
                                                    }
                                                  },
                                                  "id": 3349,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "memberLocation": "3087:22:18",
                                                  "memberName": "ERC1155InvalidReceiver",
                                                  "nodeType": "MemberAccess",
                                                  "referencedDeclaration": 2717,
                                                  "src": "3072:37:18",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$",
                                                    "typeString": "function (address) pure returns (error)"
                                                  }
                                                },
                                                "id": 3351,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "nameLocations": [],
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "3072:41:18",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_error",
                                                  "typeString": "error"
                                                }
                                              },
                                              "id": 3352,
                                              "nodeType": "RevertStatement",
                                              "src": "3065:48:18"
                                            }
                                          ]
                                        }
                                      }
                                    ]
                                  },
                                  "errorName": "",
                                  "id": 3356,
                                  "nodeType": "TryCatchClause",
                                  "parameters": {
                                    "id": 3341,
                                    "nodeType": "ParameterList",
                                    "parameters": [
                                      {
                                        "constant": false,
                                        "id": 3340,
                                        "mutability": "mutable",
                                        "name": "response",
                                        "nameLocation": "2897:8:18",
                                        "nodeType": "VariableDeclaration",
                                        "scope": 3356,
                                        "src": "2890:15:18",
                                        "stateVariable": false,
                                        "storageLocation": "default",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes4",
                                          "typeString": "bytes4"
                                        },
                                        "typeName": {
                                          "id": 3339,
                                          "name": "bytes4",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "2890:6:18",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes4",
                                            "typeString": "bytes4"
                                          }
                                        },
                                        "visibility": "internal"
                                      }
                                    ],
                                    "src": "2872:47:18"
                                  },
                                  "src": "2864:282:18"
                                },
                                {
                                  "block": {
                                    "id": 3374,
                                    "nodeType": "Block",
                                    "src": "3175:360:18",
                                    "statements": [
                                      {
                                        "condition": {
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 3363,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "expression": {
                                              "id": 3360,
                                              "name": "reason",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 3358,
                                              "src": "3197:6:18",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                "typeString": "bytes memory"
                                              }
                                            },
                                            "id": 3361,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberLocation": "3204:6:18",
                                            "memberName": "length",
                                            "nodeType": "MemberAccess",
                                            "src": "3197:13:18",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "==",
                                          "rightExpression": {
                                            "hexValue": "30",
                                            "id": 3362,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "3214:1:18",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_0_by_1",
                                              "typeString": "int_const 0"
                                            },
                                            "value": "0"
                                          },
                                          "src": "3197:18:18",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                          }
                                        },
                                        "falseBody": {
                                          "id": 3372,
                                          "nodeType": "Block",
                                          "src": "3368:153:18",
                                          "statements": [
                                            {
                                              "AST": {
                                                "nativeSrc": "3415:88:18",
                                                "nodeType": "YulBlock",
                                                "src": "3415:88:18",
                                                "statements": [
                                                  {
                                                    "expression": {
                                                      "arguments": [
                                                        {
                                                          "arguments": [
                                                            {
                                                              "name": "reason",
                                                              "nativeSrc": "3452:6:18",
                                                              "nodeType": "YulIdentifier",
                                                              "src": "3452:6:18"
                                                            },
                                                            {
                                                              "kind": "number",
                                                              "nativeSrc": "3460:4:18",
                                                              "nodeType": "YulLiteral",
                                                              "src": "3460:4:18",
                                                              "type": "",
                                                              "value": "0x20"
                                                            }
                                                          ],
                                                          "functionName": {
                                                            "name": "add",
                                                            "nativeSrc": "3448:3:18",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "3448:3:18"
                                                          },
                                                          "nativeSrc": "3448:17:18",
                                                          "nodeType": "YulFunctionCall",
                                                          "src": "3448:17:18"
                                                        },
                                                        {
                                                          "arguments": [
                                                            {
                                                              "name": "reason",
                                                              "nativeSrc": "3473:6:18",
                                                              "nodeType": "YulIdentifier",
                                                              "src": "3473:6:18"
                                                            }
                                                          ],
                                                          "functionName": {
                                                            "name": "mload",
                                                            "nativeSrc": "3467:5:18",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "3467:5:18"
                                                          },
                                                          "nativeSrc": "3467:13:18",
                                                          "nodeType": "YulFunctionCall",
                                                          "src": "3467:13:18"
                                                        }
                                                      ],
                                                      "functionName": {
                                                        "name": "revert",
                                                        "nativeSrc": "3441:6:18",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "3441:6:18"
                                                      },
                                                      "nativeSrc": "3441:40:18",
                                                      "nodeType": "YulFunctionCall",
                                                      "src": "3441:40:18"
                                                    },
                                                    "nativeSrc": "3441:40:18",
                                                    "nodeType": "YulExpressionStatement",
                                                    "src": "3441:40:18"
                                                  }
                                                ]
                                              },
                                              "evmVersion": "paris",
                                              "externalReferences": [
                                                {
                                                  "declaration": 3358,
                                                  "isOffset": false,
                                                  "isSlot": false,
                                                  "src": "3452:6:18",
                                                  "valueSize": 1
                                                },
                                                {
                                                  "declaration": 3358,
                                                  "isOffset": false,
                                                  "isSlot": false,
                                                  "src": "3473:6:18",
                                                  "valueSize": 1
                                                }
                                              ],
                                              "flags": [
                                                "memory-safe"
                                              ],
                                              "id": 3371,
                                              "nodeType": "InlineAssembly",
                                              "src": "3390:113:18"
                                            }
                                          ]
                                        },
                                        "id": 3373,
                                        "nodeType": "IfStatement",
                                        "src": "3193:328:18",
                                        "trueBody": {
                                          "id": 3370,
                                          "nodeType": "Block",
                                          "src": "3217:145:18",
                                          "statements": [
                                            {
                                              "errorCall": {
                                                "arguments": [
                                                  {
                                                    "id": 3367,
                                                    "name": "to",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 3313,
                                                    "src": "3340:2:18",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_address",
                                                      "typeString": "address"
                                                    }
                                                  }
                                                ],
                                                "expression": {
                                                  "argumentTypes": [
                                                    {
                                                      "typeIdentifier": "t_address",
                                                      "typeString": "address"
                                                    }
                                                  ],
                                                  "expression": {
                                                    "id": 3364,
                                                    "name": "IERC1155Errors",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 2742,
                                                    "src": "3302:14:18",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_type$_t_contract$_IERC1155Errors_$2742_$",
                                                      "typeString": "type(contract IERC1155Errors)"
                                                    }
                                                  },
                                                  "id": 3366,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "memberLocation": "3317:22:18",
                                                  "memberName": "ERC1155InvalidReceiver",
                                                  "nodeType": "MemberAccess",
                                                  "referencedDeclaration": 2717,
                                                  "src": "3302:37:18",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$",
                                                    "typeString": "function (address) pure returns (error)"
                                                  }
                                                },
                                                "id": 3368,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "nameLocations": [],
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "3302:41:18",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_error",
                                                  "typeString": "error"
                                                }
                                              },
                                              "id": 3369,
                                              "nodeType": "RevertStatement",
                                              "src": "3295:48:18"
                                            }
                                          ]
                                        }
                                      }
                                    ]
                                  },
                                  "errorName": "",
                                  "id": 3375,
                                  "nodeType": "TryCatchClause",
                                  "parameters": {
                                    "id": 3359,
                                    "nodeType": "ParameterList",
                                    "parameters": [
                                      {
                                        "constant": false,
                                        "id": 3358,
                                        "mutability": "mutable",
                                        "name": "reason",
                                        "nameLocation": "3167:6:18",
                                        "nodeType": "VariableDeclaration",
                                        "scope": 3375,
                                        "src": "3154:19:18",
                                        "stateVariable": false,
                                        "storageLocation": "memory",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes"
                                        },
                                        "typeName": {
                                          "id": 3357,
                                          "name": "bytes",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "3154:5:18",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_storage_ptr",
                                            "typeString": "bytes"
                                          }
                                        },
                                        "visibility": "internal"
                                      }
                                    ],
                                    "src": "3153:21:18"
                                  },
                                  "src": "3147:388:18"
                                }
                              ],
                              "externalCall": {
                                "arguments": [
                                  {
                                    "id": 3333,
                                    "name": "operator",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3309,
                                    "src": "2829:8:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "id": 3334,
                                    "name": "from",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3311,
                                    "src": "2839:4:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "id": 3335,
                                    "name": "ids",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3316,
                                    "src": "2845:3:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                      "typeString": "uint256[] memory"
                                    }
                                  },
                                  {
                                    "id": 3336,
                                    "name": "values",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3319,
                                    "src": "2850:6:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                      "typeString": "uint256[] memory"
                                    }
                                  },
                                  {
                                    "id": 3337,
                                    "name": "data",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3321,
                                    "src": "2858:4:18",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                      "typeString": "uint256[] memory"
                                    },
                                    {
                                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                      "typeString": "uint256[] memory"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  ],
                                  "expression": {
                                    "arguments": [
                                      {
                                        "id": 3330,
                                        "name": "to",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3313,
                                        "src": "2802:2:18",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "id": 3329,
                                      "name": "IERC1155Receiver",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3211,
                                      "src": "2785:16:18",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_IERC1155Receiver_$3211_$",
                                        "typeString": "type(contract IERC1155Receiver)"
                                      }
                                    },
                                    "id": 3331,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "2785:20:18",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IERC1155Receiver_$3211",
                                      "typeString": "contract IERC1155Receiver"
                                    }
                                  },
                                  "id": 3332,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "2806:22:18",
                                  "memberName": "onERC1155BatchReceived",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3210,
                                  "src": "2785:43:18",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bytes4_$",
                                    "typeString": "function (address,address,uint256[] memory,uint256[] memory,bytes memory) external returns (bytes4)"
                                  }
                                },
                                "id": 3338,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2785:78:18",
                                "tryCall": true,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              },
                              "id": 3376,
                              "nodeType": "TryStatement",
                              "src": "2781:754:18"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3307,
                    "nodeType": "StructuredDocumentation",
                    "src": "1973:545:18",
                    "text": " @dev Performs a batch acceptance check for the provided `operator` by calling {IERC1155Receiver-onERC1155BatchReceived}\n on the `to` address. The `operator` is generally the address that initiated the token transfer (i.e. `msg.sender`).\n The acceptance call is not executed and treated as a no-op if the target address doesn't contain code (i.e. an EOA).\n Otherwise, the recipient must implement {IERC1155Receiver-onERC1155Received} and return the acceptance magic value to accept\n the transfer."
                  },
                  "id": 3380,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "checkOnERC1155BatchReceived",
                  "nameLocation": "2532:27:18",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3322,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3309,
                        "mutability": "mutable",
                        "name": "operator",
                        "nameLocation": "2577:8:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 3380,
                        "src": "2569:16:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3308,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2569:7:18",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3311,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "2603:4:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 3380,
                        "src": "2595:12:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3310,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2595:7:18",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3313,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "2625:2:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 3380,
                        "src": "2617:10:18",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3312,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2617:7:18",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3316,
                        "mutability": "mutable",
                        "name": "ids",
                        "nameLocation": "2654:3:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 3380,
                        "src": "2637:20:18",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 3314,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "2637:7:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 3315,
                          "nodeType": "ArrayTypeName",
                          "src": "2637:9:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                            "typeString": "uint256[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3319,
                        "mutability": "mutable",
                        "name": "values",
                        "nameLocation": "2684:6:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 3380,
                        "src": "2667:23:18",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 3317,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "2667:7:18",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 3318,
                          "nodeType": "ArrayTypeName",
                          "src": "2667:9:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                            "typeString": "uint256[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3321,
                        "mutability": "mutable",
                        "name": "data",
                        "nameLocation": "2713:4:18",
                        "nodeType": "VariableDeclaration",
                        "scope": 3380,
                        "src": "2700:17:18",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 3320,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "2700:5:18",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2559:164:18"
                  },
                  "returnParameters": {
                    "id": 3323,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2733:0:18"
                  },
                  "scope": 3381,
                  "src": "2523:1028:18",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 3382,
              "src": "439:3114:18",
              "usedErrors": [],
              "usedEvents": []
            }
          ],
          "src": "120:3434:18"
        },
        "id": 18
      },
      "@openzeppelin/contracts/utils/Address.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/utils/Address.sol",
          "exportedSymbols": {
            "Address": [
              3641
            ],
            "Errors": [
              4673
            ]
          },
          "id": 3642,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 3383,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".20"
              ],
              "nodeType": "PragmaDirective",
              "src": "101:24:19"
            },
            {
              "absolutePath": "@openzeppelin/contracts/utils/Errors.sol",
              "file": "./Errors.sol",
              "id": 3385,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 3642,
              "sourceUnit": 4674,
              "src": "127:36:19",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 3384,
                    "name": "Errors",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4673,
                    "src": "135:6:19",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [],
              "canonicalName": "Address",
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 3386,
                "nodeType": "StructuredDocumentation",
                "src": "165:67:19",
                "text": " @dev Collection of functions related to the address type"
              },
              "fullyImplemented": true,
              "id": 3641,
              "linearizedBaseContracts": [
                3641
              ],
              "name": "Address",
              "nameLocation": "241:7:19",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "documentation": {
                    "id": 3387,
                    "nodeType": "StructuredDocumentation",
                    "src": "255:75:19",
                    "text": " @dev There's no code at `target` (it is not a contract)."
                  },
                  "errorSelector": "9996b315",
                  "id": 3391,
                  "name": "AddressEmptyCode",
                  "nameLocation": "341:16:19",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 3390,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3389,
                        "mutability": "mutable",
                        "name": "target",
                        "nameLocation": "366:6:19",
                        "nodeType": "VariableDeclaration",
                        "scope": 3391,
                        "src": "358:14:19",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3388,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "358:7:19",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "357:16:19"
                  },
                  "src": "335:39:19"
                },
                {
                  "body": {
                    "id": 3438,
                    "nodeType": "Block",
                    "src": "1361:294:19",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 3405,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 3401,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "1383:4:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_Address_$3641",
                                    "typeString": "library Address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_Address_$3641",
                                    "typeString": "library Address"
                                  }
                                ],
                                "id": 3400,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "1375:7:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 3399,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "1375:7:19",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 3402,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1375:13:19",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "id": 3403,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "1389:7:19",
                            "memberName": "balance",
                            "nodeType": "MemberAccess",
                            "src": "1375:21:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "id": 3404,
                            "name": "amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3396,
                            "src": "1399:6:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "1375:30:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 3418,
                        "nodeType": "IfStatement",
                        "src": "1371:125:19",
                        "trueBody": {
                          "id": 3417,
                          "nodeType": "Block",
                          "src": "1407:89:19",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "id": 3411,
                                          "name": "this",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": -28,
                                          "src": "1463:4:19",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_Address_$3641",
                                            "typeString": "library Address"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_contract$_Address_$3641",
                                            "typeString": "library Address"
                                          }
                                        ],
                                        "id": 3410,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "ElementaryTypeNameExpression",
                                        "src": "1455:7:19",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_address_$",
                                          "typeString": "type(address)"
                                        },
                                        "typeName": {
                                          "id": 3409,
                                          "name": "address",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "1455:7:19",
                                          "typeDescriptions": {}
                                        }
                                      },
                                      "id": 3412,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "nameLocations": [],
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "1455:13:19",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "id": 3413,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "1469:7:19",
                                    "memberName": "balance",
                                    "nodeType": "MemberAccess",
                                    "src": "1455:21:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "id": 3414,
                                    "name": "amount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3396,
                                    "src": "1478:6:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "id": 3406,
                                    "name": "Errors",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4673,
                                    "src": "1428:6:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_Errors_$4673_$",
                                      "typeString": "type(library Errors)"
                                    }
                                  },
                                  "id": 3408,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "1435:19:19",
                                  "memberName": "InsufficientBalance",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 4661,
                                  "src": "1428:26:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint256_$_t_uint256_$returns$_t_error_$",
                                    "typeString": "function (uint256,uint256) pure returns (error)"
                                  }
                                },
                                "id": 3415,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1428:57:19",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 3416,
                              "nodeType": "RevertStatement",
                              "src": "1421:64:19"
                            }
                          ]
                        }
                      },
                      {
                        "assignments": [
                          3420,
                          3422
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3420,
                            "mutability": "mutable",
                            "name": "success",
                            "nameLocation": "1512:7:19",
                            "nodeType": "VariableDeclaration",
                            "scope": 3438,
                            "src": "1507:12:19",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 3419,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "1507:4:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 3422,
                            "mutability": "mutable",
                            "name": "returndata",
                            "nameLocation": "1534:10:19",
                            "nodeType": "VariableDeclaration",
                            "scope": 3438,
                            "src": "1521:23:19",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 3421,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "1521:5:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3429,
                        "initialValue": {
                          "arguments": [
                            {
                              "hexValue": "",
                              "id": 3427,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1578:2:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                "typeString": "literal_string \"\""
                              },
                              "value": ""
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                "typeString": "literal_string \"\""
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                  "typeString": "literal_string \"\""
                                }
                              ],
                              "expression": {
                                "id": 3423,
                                "name": "recipient",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3394,
                                "src": "1548:9:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "id": 3424,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "1558:4:19",
                              "memberName": "call",
                              "nodeType": "MemberAccess",
                              "src": "1548:14:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                                "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                              }
                            },
                            "id": 3426,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "names": [
                              "value"
                            ],
                            "nodeType": "FunctionCallOptions",
                            "options": [
                              {
                                "id": 3425,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3396,
                                "src": "1570:6:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "src": "1548:29:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value",
                              "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                            }
                          },
                          "id": 3428,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1548:33:19",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                            "typeString": "tuple(bool,bytes memory)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1506:75:19"
                      },
                      {
                        "condition": {
                          "id": 3431,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "1595:8:19",
                          "subExpression": {
                            "id": 3430,
                            "name": "success",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3420,
                            "src": "1596:7:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 3437,
                        "nodeType": "IfStatement",
                        "src": "1591:58:19",
                        "trueBody": {
                          "id": 3436,
                          "nodeType": "Block",
                          "src": "1605:44:19",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 3433,
                                    "name": "returndata",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3422,
                                    "src": "1627:10:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  ],
                                  "id": 3432,
                                  "name": "_revert",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3640,
                                  "src": "1619:7:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$__$",
                                    "typeString": "function (bytes memory) pure"
                                  }
                                },
                                "id": 3434,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1619:19:19",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 3435,
                              "nodeType": "ExpressionStatement",
                              "src": "1619:19:19"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3392,
                    "nodeType": "StructuredDocumentation",
                    "src": "380:905:19",
                    "text": " @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n `recipient`, forwarding all available gas and reverting on errors.\n https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n of certain opcodes, possibly making contracts go over the 2300 gas limit\n imposed by `transfer`, making them unable to receive funds via\n `transfer`. {sendValue} removes this limitation.\n https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n IMPORTANT: because control is transferred to `recipient`, care must be\n taken to not create reentrancy vulnerabilities. Consider using\n {ReentrancyGuard} or the\n https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]."
                  },
                  "id": 3439,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "sendValue",
                  "nameLocation": "1299:9:19",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3397,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3394,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nameLocation": "1325:9:19",
                        "nodeType": "VariableDeclaration",
                        "scope": 3439,
                        "src": "1309:25:19",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        "typeName": {
                          "id": 3393,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1309:15:19",
                          "stateMutability": "payable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3396,
                        "mutability": "mutable",
                        "name": "amount",
                        "nameLocation": "1344:6:19",
                        "nodeType": "VariableDeclaration",
                        "scope": 3439,
                        "src": "1336:14:19",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3395,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1336:7:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1308:43:19"
                  },
                  "returnParameters": {
                    "id": 3398,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1361:0:19"
                  },
                  "scope": 3641,
                  "src": "1290:365:19",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 3455,
                    "nodeType": "Block",
                    "src": "2589:62:19",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 3450,
                              "name": "target",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3442,
                              "src": "2628:6:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 3451,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3444,
                              "src": "2636:4:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "hexValue": "30",
                              "id": 3452,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2642:1:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 3449,
                            "name": "functionCallWithValue",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3506,
                            "src": "2606:21:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function (address,bytes memory,uint256) returns (bytes memory)"
                            }
                          },
                          "id": 3453,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2606:38:19",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "functionReturnParameters": 3448,
                        "id": 3454,
                        "nodeType": "Return",
                        "src": "2599:45:19"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3440,
                    "nodeType": "StructuredDocumentation",
                    "src": "1661:834:19",
                    "text": " @dev Performs a Solidity function call using a low level `call`. A\n plain `call` is an unsafe replacement for a function call: use this\n function instead.\n If `target` reverts with a revert reason or custom error, it is bubbled\n up by this function (like regular Solidity function calls). However, if\n the call reverted with no returned reason, this function reverts with a\n {Errors.FailedCall} error.\n Returns the raw returned data. To convert to the expected return value,\n use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n Requirements:\n - `target` must be a contract.\n - calling `target` with `data` must not revert."
                  },
                  "id": 3456,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "functionCall",
                  "nameLocation": "2509:12:19",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3445,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3442,
                        "mutability": "mutable",
                        "name": "target",
                        "nameLocation": "2530:6:19",
                        "nodeType": "VariableDeclaration",
                        "scope": 3456,
                        "src": "2522:14:19",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3441,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2522:7:19",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3444,
                        "mutability": "mutable",
                        "name": "data",
                        "nameLocation": "2551:4:19",
                        "nodeType": "VariableDeclaration",
                        "scope": 3456,
                        "src": "2538:17:19",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 3443,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "2538:5:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2521:35:19"
                  },
                  "returnParameters": {
                    "id": 3448,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3447,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 3456,
                        "src": "2575:12:19",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 3446,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "2575:5:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2574:14:19"
                  },
                  "scope": 3641,
                  "src": "2500:151:19",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 3505,
                    "nodeType": "Block",
                    "src": "3088:294:19",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 3474,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 3470,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "3110:4:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_Address_$3641",
                                    "typeString": "library Address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_Address_$3641",
                                    "typeString": "library Address"
                                  }
                                ],
                                "id": 3469,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "3102:7:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 3468,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "3102:7:19",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 3471,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3102:13:19",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "id": 3472,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "3116:7:19",
                            "memberName": "balance",
                            "nodeType": "MemberAccess",
                            "src": "3102:21:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "id": 3473,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3463,
                            "src": "3126:5:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3102:29:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 3487,
                        "nodeType": "IfStatement",
                        "src": "3098:123:19",
                        "trueBody": {
                          "id": 3486,
                          "nodeType": "Block",
                          "src": "3133:88:19",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "id": 3480,
                                          "name": "this",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": -28,
                                          "src": "3189:4:19",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_contract$_Address_$3641",
                                            "typeString": "library Address"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_contract$_Address_$3641",
                                            "typeString": "library Address"
                                          }
                                        ],
                                        "id": 3479,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "ElementaryTypeNameExpression",
                                        "src": "3181:7:19",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_address_$",
                                          "typeString": "type(address)"
                                        },
                                        "typeName": {
                                          "id": 3478,
                                          "name": "address",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "3181:7:19",
                                          "typeDescriptions": {}
                                        }
                                      },
                                      "id": 3481,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "nameLocations": [],
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "3181:13:19",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "id": 3482,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "3195:7:19",
                                    "memberName": "balance",
                                    "nodeType": "MemberAccess",
                                    "src": "3181:21:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "id": 3483,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3463,
                                    "src": "3204:5:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "id": 3475,
                                    "name": "Errors",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4673,
                                    "src": "3154:6:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_Errors_$4673_$",
                                      "typeString": "type(library Errors)"
                                    }
                                  },
                                  "id": 3477,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "3161:19:19",
                                  "memberName": "InsufficientBalance",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 4661,
                                  "src": "3154:26:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint256_$_t_uint256_$returns$_t_error_$",
                                    "typeString": "function (uint256,uint256) pure returns (error)"
                                  }
                                },
                                "id": 3484,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3154:56:19",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 3485,
                              "nodeType": "RevertStatement",
                              "src": "3147:63:19"
                            }
                          ]
                        }
                      },
                      {
                        "assignments": [
                          3489,
                          3491
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3489,
                            "mutability": "mutable",
                            "name": "success",
                            "nameLocation": "3236:7:19",
                            "nodeType": "VariableDeclaration",
                            "scope": 3505,
                            "src": "3231:12:19",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 3488,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "3231:4:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 3491,
                            "mutability": "mutable",
                            "name": "returndata",
                            "nameLocation": "3258:10:19",
                            "nodeType": "VariableDeclaration",
                            "scope": 3505,
                            "src": "3245:23:19",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 3490,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "3245:5:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3498,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 3496,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3461,
                              "src": "3298:4:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "expression": {
                                "id": 3492,
                                "name": "target",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3459,
                                "src": "3272:6:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "id": 3493,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "3279:4:19",
                              "memberName": "call",
                              "nodeType": "MemberAccess",
                              "src": "3272:11:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                                "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                              }
                            },
                            "id": 3495,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "names": [
                              "value"
                            ],
                            "nodeType": "FunctionCallOptions",
                            "options": [
                              {
                                "id": 3494,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3463,
                                "src": "3291:5:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "src": "3272:25:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value",
                              "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                            }
                          },
                          "id": 3497,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3272:31:19",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                            "typeString": "tuple(bool,bytes memory)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3230:73:19"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 3500,
                              "name": "target",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3459,
                              "src": "3347:6:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 3501,
                              "name": "success",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3489,
                              "src": "3355:7:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "id": 3502,
                              "name": "returndata",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3491,
                              "src": "3364:10:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 3499,
                            "name": "verifyCallResultFromTarget",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3598,
                            "src": "3320:26:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function (address,bool,bytes memory) view returns (bytes memory)"
                            }
                          },
                          "id": 3503,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3320:55:19",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "functionReturnParameters": 3467,
                        "id": 3504,
                        "nodeType": "Return",
                        "src": "3313:62:19"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3457,
                    "nodeType": "StructuredDocumentation",
                    "src": "2657:313:19",
                    "text": " @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but also transferring `value` wei to `target`.\n Requirements:\n - the calling contract must have an ETH balance of at least `value`.\n - the called Solidity function must be `payable`."
                  },
                  "id": 3506,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "functionCallWithValue",
                  "nameLocation": "2984:21:19",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3464,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3459,
                        "mutability": "mutable",
                        "name": "target",
                        "nameLocation": "3014:6:19",
                        "nodeType": "VariableDeclaration",
                        "scope": 3506,
                        "src": "3006:14:19",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3458,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3006:7:19",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3461,
                        "mutability": "mutable",
                        "name": "data",
                        "nameLocation": "3035:4:19",
                        "nodeType": "VariableDeclaration",
                        "scope": 3506,
                        "src": "3022:17:19",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 3460,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "3022:5:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3463,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "3049:5:19",
                        "nodeType": "VariableDeclaration",
                        "scope": 3506,
                        "src": "3041:13:19",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3462,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3041:7:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3005:50:19"
                  },
                  "returnParameters": {
                    "id": 3467,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3466,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 3506,
                        "src": "3074:12:19",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 3465,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "3074:5:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3073:14:19"
                  },
                  "scope": 3641,
                  "src": "2975:407:19",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 3531,
                    "nodeType": "Block",
                    "src": "3621:154:19",
                    "statements": [
                      {
                        "assignments": [
                          3517,
                          3519
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3517,
                            "mutability": "mutable",
                            "name": "success",
                            "nameLocation": "3637:7:19",
                            "nodeType": "VariableDeclaration",
                            "scope": 3531,
                            "src": "3632:12:19",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 3516,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "3632:4:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 3519,
                            "mutability": "mutable",
                            "name": "returndata",
                            "nameLocation": "3659:10:19",
                            "nodeType": "VariableDeclaration",
                            "scope": 3531,
                            "src": "3646:23:19",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 3518,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "3646:5:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3524,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 3522,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3511,
                              "src": "3691:4:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "id": 3520,
                              "name": "target",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3509,
                              "src": "3673:6:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "id": 3521,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "3680:10:19",
                            "memberName": "staticcall",
                            "nodeType": "MemberAccess",
                            "src": "3673:17:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                              "typeString": "function (bytes memory) view returns (bool,bytes memory)"
                            }
                          },
                          "id": 3523,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3673:23:19",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                            "typeString": "tuple(bool,bytes memory)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3631:65:19"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 3526,
                              "name": "target",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3509,
                              "src": "3740:6:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 3527,
                              "name": "success",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3517,
                              "src": "3748:7:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "id": 3528,
                              "name": "returndata",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3519,
                              "src": "3757:10:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 3525,
                            "name": "verifyCallResultFromTarget",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3598,
                            "src": "3713:26:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function (address,bool,bytes memory) view returns (bytes memory)"
                            }
                          },
                          "id": 3529,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3713:55:19",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "functionReturnParameters": 3515,
                        "id": 3530,
                        "nodeType": "Return",
                        "src": "3706:62:19"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3507,
                    "nodeType": "StructuredDocumentation",
                    "src": "3388:128:19",
                    "text": " @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a static call."
                  },
                  "id": 3532,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "functionStaticCall",
                  "nameLocation": "3530:18:19",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3512,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3509,
                        "mutability": "mutable",
                        "name": "target",
                        "nameLocation": "3557:6:19",
                        "nodeType": "VariableDeclaration",
                        "scope": 3532,
                        "src": "3549:14:19",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3508,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3549:7:19",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3511,
                        "mutability": "mutable",
                        "name": "data",
                        "nameLocation": "3578:4:19",
                        "nodeType": "VariableDeclaration",
                        "scope": 3532,
                        "src": "3565:17:19",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 3510,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "3565:5:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3548:35:19"
                  },
                  "returnParameters": {
                    "id": 3515,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3514,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 3532,
                        "src": "3607:12:19",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 3513,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "3607:5:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3606:14:19"
                  },
                  "scope": 3641,
                  "src": "3521:254:19",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 3557,
                    "nodeType": "Block",
                    "src": "4013:156:19",
                    "statements": [
                      {
                        "assignments": [
                          3543,
                          3545
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3543,
                            "mutability": "mutable",
                            "name": "success",
                            "nameLocation": "4029:7:19",
                            "nodeType": "VariableDeclaration",
                            "scope": 3557,
                            "src": "4024:12:19",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 3542,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "4024:4:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 3545,
                            "mutability": "mutable",
                            "name": "returndata",
                            "nameLocation": "4051:10:19",
                            "nodeType": "VariableDeclaration",
                            "scope": 3557,
                            "src": "4038:23:19",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 3544,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "4038:5:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3550,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 3548,
                              "name": "data",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3537,
                              "src": "4085:4:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "id": 3546,
                              "name": "target",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3535,
                              "src": "4065:6:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "id": 3547,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "4072:12:19",
                            "memberName": "delegatecall",
                            "nodeType": "MemberAccess",
                            "src": "4065:19:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_baredelegatecall_nonpayable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                              "typeString": "function (bytes memory) returns (bool,bytes memory)"
                            }
                          },
                          "id": 3549,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4065:25:19",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                            "typeString": "tuple(bool,bytes memory)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4023:67:19"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 3552,
                              "name": "target",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3535,
                              "src": "4134:6:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 3553,
                              "name": "success",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3543,
                              "src": "4142:7:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "id": 3554,
                              "name": "returndata",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3545,
                              "src": "4151:10:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 3551,
                            "name": "verifyCallResultFromTarget",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3598,
                            "src": "4107:26:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function (address,bool,bytes memory) view returns (bytes memory)"
                            }
                          },
                          "id": 3555,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4107:55:19",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "functionReturnParameters": 3541,
                        "id": 3556,
                        "nodeType": "Return",
                        "src": "4100:62:19"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3533,
                    "nodeType": "StructuredDocumentation",
                    "src": "3781:130:19",
                    "text": " @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a delegate call."
                  },
                  "id": 3558,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "functionDelegateCall",
                  "nameLocation": "3925:20:19",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3538,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3535,
                        "mutability": "mutable",
                        "name": "target",
                        "nameLocation": "3954:6:19",
                        "nodeType": "VariableDeclaration",
                        "scope": 3558,
                        "src": "3946:14:19",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3534,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3946:7:19",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3537,
                        "mutability": "mutable",
                        "name": "data",
                        "nameLocation": "3975:4:19",
                        "nodeType": "VariableDeclaration",
                        "scope": 3558,
                        "src": "3962:17:19",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 3536,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "3962:5:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3945:35:19"
                  },
                  "returnParameters": {
                    "id": 3541,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3540,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 3558,
                        "src": "3999:12:19",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 3539,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "3999:5:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3998:14:19"
                  },
                  "scope": 3641,
                  "src": "3916:253:19",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 3597,
                    "nodeType": "Block",
                    "src": "4595:424:19",
                    "statements": [
                      {
                        "condition": {
                          "id": 3571,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "4609:8:19",
                          "subExpression": {
                            "id": 3570,
                            "name": "success",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3563,
                            "src": "4610:7:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 3595,
                          "nodeType": "Block",
                          "src": "4669:344:19",
                          "statements": [
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "id": 3586,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 3580,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "expression": {
                                      "id": 3577,
                                      "name": "returndata",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3565,
                                      "src": "4857:10:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes memory"
                                      }
                                    },
                                    "id": 3578,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "4868:6:19",
                                    "memberName": "length",
                                    "nodeType": "MemberAccess",
                                    "src": "4857:17:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "==",
                                  "rightExpression": {
                                    "hexValue": "30",
                                    "id": 3579,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "4878:1:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  },
                                  "src": "4857:22:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "&&",
                                "rightExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 3585,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "expression": {
                                      "expression": {
                                        "id": 3581,
                                        "name": "target",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3561,
                                        "src": "4883:6:19",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      "id": 3582,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberLocation": "4890:4:19",
                                      "memberName": "code",
                                      "nodeType": "MemberAccess",
                                      "src": "4883:11:19",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes memory"
                                      }
                                    },
                                    "id": 3583,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "4895:6:19",
                                    "memberName": "length",
                                    "nodeType": "MemberAccess",
                                    "src": "4883:18:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "==",
                                  "rightExpression": {
                                    "hexValue": "30",
                                    "id": 3584,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "4905:1:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  },
                                  "src": "4883:23:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "src": "4857:49:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 3592,
                              "nodeType": "IfStatement",
                              "src": "4853:119:19",
                              "trueBody": {
                                "id": 3591,
                                "nodeType": "Block",
                                "src": "4908:64:19",
                                "statements": [
                                  {
                                    "errorCall": {
                                      "arguments": [
                                        {
                                          "id": 3588,
                                          "name": "target",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 3561,
                                          "src": "4950:6:19",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        ],
                                        "id": 3587,
                                        "name": "AddressEmptyCode",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3391,
                                        "src": "4933:16:19",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$",
                                          "typeString": "function (address) pure returns (error)"
                                        }
                                      },
                                      "id": 3589,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "nameLocations": [],
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "4933:24:19",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_error",
                                        "typeString": "error"
                                      }
                                    },
                                    "id": 3590,
                                    "nodeType": "RevertStatement",
                                    "src": "4926:31:19"
                                  }
                                ]
                              }
                            },
                            {
                              "expression": {
                                "id": 3593,
                                "name": "returndata",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3565,
                                "src": "4992:10:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "functionReturnParameters": 3569,
                              "id": 3594,
                              "nodeType": "Return",
                              "src": "4985:17:19"
                            }
                          ]
                        },
                        "id": 3596,
                        "nodeType": "IfStatement",
                        "src": "4605:408:19",
                        "trueBody": {
                          "id": 3576,
                          "nodeType": "Block",
                          "src": "4619:44:19",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 3573,
                                    "name": "returndata",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3565,
                                    "src": "4641:10:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  ],
                                  "id": 3572,
                                  "name": "_revert",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3640,
                                  "src": "4633:7:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$__$",
                                    "typeString": "function (bytes memory) pure"
                                  }
                                },
                                "id": 3574,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4633:19:19",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 3575,
                              "nodeType": "ExpressionStatement",
                              "src": "4633:19:19"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3559,
                    "nodeType": "StructuredDocumentation",
                    "src": "4175:257:19",
                    "text": " @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target\n was not a contract or bubbling up the revert reason (falling back to {Errors.FailedCall}) in case\n of an unsuccessful call."
                  },
                  "id": 3598,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "verifyCallResultFromTarget",
                  "nameLocation": "4446:26:19",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3566,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3561,
                        "mutability": "mutable",
                        "name": "target",
                        "nameLocation": "4490:6:19",
                        "nodeType": "VariableDeclaration",
                        "scope": 3598,
                        "src": "4482:14:19",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 3560,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4482:7:19",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3563,
                        "mutability": "mutable",
                        "name": "success",
                        "nameLocation": "4511:7:19",
                        "nodeType": "VariableDeclaration",
                        "scope": 3598,
                        "src": "4506:12:19",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3562,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "4506:4:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3565,
                        "mutability": "mutable",
                        "name": "returndata",
                        "nameLocation": "4541:10:19",
                        "nodeType": "VariableDeclaration",
                        "scope": 3598,
                        "src": "4528:23:19",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 3564,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "4528:5:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4472:85:19"
                  },
                  "returnParameters": {
                    "id": 3569,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3568,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 3598,
                        "src": "4581:12:19",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 3567,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "4581:5:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4580:14:19"
                  },
                  "scope": 3641,
                  "src": "4437:582:19",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 3619,
                    "nodeType": "Block",
                    "src": "5323:122:19",
                    "statements": [
                      {
                        "condition": {
                          "id": 3609,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "5337:8:19",
                          "subExpression": {
                            "id": 3608,
                            "name": "success",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3601,
                            "src": "5338:7:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 3617,
                          "nodeType": "Block",
                          "src": "5397:42:19",
                          "statements": [
                            {
                              "expression": {
                                "id": 3615,
                                "name": "returndata",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3603,
                                "src": "5418:10:19",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "functionReturnParameters": 3607,
                              "id": 3616,
                              "nodeType": "Return",
                              "src": "5411:17:19"
                            }
                          ]
                        },
                        "id": 3618,
                        "nodeType": "IfStatement",
                        "src": "5333:106:19",
                        "trueBody": {
                          "id": 3614,
                          "nodeType": "Block",
                          "src": "5347:44:19",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 3611,
                                    "name": "returndata",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3603,
                                    "src": "5369:10:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  ],
                                  "id": 3610,
                                  "name": "_revert",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3640,
                                  "src": "5361:7:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$__$",
                                    "typeString": "function (bytes memory) pure"
                                  }
                                },
                                "id": 3612,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "5361:19:19",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 3613,
                              "nodeType": "ExpressionStatement",
                              "src": "5361:19:19"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3599,
                    "nodeType": "StructuredDocumentation",
                    "src": "5025:191:19",
                    "text": " @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the\n revert reason or with a default {Errors.FailedCall} error."
                  },
                  "id": 3620,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "verifyCallResult",
                  "nameLocation": "5230:16:19",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3604,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3601,
                        "mutability": "mutable",
                        "name": "success",
                        "nameLocation": "5252:7:19",
                        "nodeType": "VariableDeclaration",
                        "scope": 3620,
                        "src": "5247:12:19",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 3600,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "5247:4:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3603,
                        "mutability": "mutable",
                        "name": "returndata",
                        "nameLocation": "5274:10:19",
                        "nodeType": "VariableDeclaration",
                        "scope": 3620,
                        "src": "5261:23:19",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 3602,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "5261:5:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5246:39:19"
                  },
                  "returnParameters": {
                    "id": 3607,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3606,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 3620,
                        "src": "5309:12:19",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 3605,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "5309:5:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5308:14:19"
                  },
                  "scope": 3641,
                  "src": "5221:224:19",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 3639,
                    "nodeType": "Block",
                    "src": "5614:379:19",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 3629,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 3626,
                              "name": "returndata",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3623,
                              "src": "5690:10:19",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 3627,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "5701:6:19",
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "5690:17:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 3628,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5710:1:19",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "5690:21:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 3637,
                          "nodeType": "Block",
                          "src": "5936:51:19",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "expression": {
                                    "id": 3632,
                                    "name": "Errors",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4673,
                                    "src": "5957:6:19",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_Errors_$4673_$",
                                      "typeString": "type(library Errors)"
                                    }
                                  },
                                  "id": 3634,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "5964:10:19",
                                  "memberName": "FailedCall",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 4664,
                                  "src": "5957:17:19",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                                    "typeString": "function () pure returns (error)"
                                  }
                                },
                                "id": 3635,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "5957:19:19",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 3636,
                              "nodeType": "RevertStatement",
                              "src": "5950:26:19"
                            }
                          ]
                        },
                        "id": 3638,
                        "nodeType": "IfStatement",
                        "src": "5686:301:19",
                        "trueBody": {
                          "id": 3631,
                          "nodeType": "Block",
                          "src": "5713:217:19",
                          "statements": [
                            {
                              "AST": {
                                "nativeSrc": "5840:80:19",
                                "nodeType": "YulBlock",
                                "src": "5840:80:19",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "returndata",
                                              "nativeSrc": "5869:10:19",
                                              "nodeType": "YulIdentifier",
                                              "src": "5869:10:19"
                                            },
                                            {
                                              "kind": "number",
                                              "nativeSrc": "5881:4:19",
                                              "nodeType": "YulLiteral",
                                              "src": "5881:4:19",
                                              "type": "",
                                              "value": "0x20"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nativeSrc": "5865:3:19",
                                            "nodeType": "YulIdentifier",
                                            "src": "5865:3:19"
                                          },
                                          "nativeSrc": "5865:21:19",
                                          "nodeType": "YulFunctionCall",
                                          "src": "5865:21:19"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "name": "returndata",
                                              "nativeSrc": "5894:10:19",
                                              "nodeType": "YulIdentifier",
                                              "src": "5894:10:19"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mload",
                                            "nativeSrc": "5888:5:19",
                                            "nodeType": "YulIdentifier",
                                            "src": "5888:5:19"
                                          },
                                          "nativeSrc": "5888:17:19",
                                          "nodeType": "YulFunctionCall",
                                          "src": "5888:17:19"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nativeSrc": "5858:6:19",
                                        "nodeType": "YulIdentifier",
                                        "src": "5858:6:19"
                                      },
                                      "nativeSrc": "5858:48:19",
                                      "nodeType": "YulFunctionCall",
                                      "src": "5858:48:19"
                                    },
                                    "nativeSrc": "5858:48:19",
                                    "nodeType": "YulExpressionStatement",
                                    "src": "5858:48:19"
                                  }
                                ]
                              },
                              "evmVersion": "paris",
                              "externalReferences": [
                                {
                                  "declaration": 3623,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "5869:10:19",
                                  "valueSize": 1
                                },
                                {
                                  "declaration": 3623,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "5894:10:19",
                                  "valueSize": 1
                                }
                              ],
                              "flags": [
                                "memory-safe"
                              ],
                              "id": 3630,
                              "nodeType": "InlineAssembly",
                              "src": "5815:105:19"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3621,
                    "nodeType": "StructuredDocumentation",
                    "src": "5451:103:19",
                    "text": " @dev Reverts with returndata if present. Otherwise reverts with {Errors.FailedCall}."
                  },
                  "id": 3640,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_revert",
                  "nameLocation": "5568:7:19",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3624,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3623,
                        "mutability": "mutable",
                        "name": "returndata",
                        "nameLocation": "5589:10:19",
                        "nodeType": "VariableDeclaration",
                        "scope": 3640,
                        "src": "5576:23:19",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 3622,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "5576:5:19",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5575:25:19"
                  },
                  "returnParameters": {
                    "id": 3625,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "5614:0:19"
                  },
                  "scope": 3641,
                  "src": "5559:434:19",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "private"
                }
              ],
              "scope": 3642,
              "src": "233:5762:19",
              "usedErrors": [
                3391
              ],
              "usedEvents": []
            }
          ],
          "src": "101:5895:19"
        },
        "id": 19
      },
      "@openzeppelin/contracts/utils/Arrays.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/utils/Arrays.sol",
          "exportedSymbols": {
            "Arrays": [
              4619
            ],
            "Comparators": [
              4651
            ],
            "Math": [
              8014
            ],
            "SlotDerivation": [
              4855
            ],
            "StorageSlot": [
              4979
            ]
          },
          "id": 4620,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 3643,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".20"
              ],
              "nodeType": "PragmaDirective",
              "src": "183:24:20"
            },
            {
              "absolutePath": "@openzeppelin/contracts/utils/Comparators.sol",
              "file": "./Comparators.sol",
              "id": 3645,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 4620,
              "sourceUnit": 4652,
              "src": "209:46:20",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 3644,
                    "name": "Comparators",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4651,
                    "src": "217:11:20",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/utils/SlotDerivation.sol",
              "file": "./SlotDerivation.sol",
              "id": 3647,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 4620,
              "sourceUnit": 4856,
              "src": "256:52:20",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 3646,
                    "name": "SlotDerivation",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4855,
                    "src": "264:14:20",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/utils/StorageSlot.sol",
              "file": "./StorageSlot.sol",
              "id": 3649,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 4620,
              "sourceUnit": 4980,
              "src": "309:46:20",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 3648,
                    "name": "StorageSlot",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4979,
                    "src": "317:11:20",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/utils/math/Math.sol",
              "file": "./math/Math.sol",
              "id": 3651,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 4620,
              "sourceUnit": 8015,
              "src": "356:37:20",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 3650,
                    "name": "Math",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8014,
                    "src": "364:4:20",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [],
              "canonicalName": "Arrays",
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 3652,
                "nodeType": "StructuredDocumentation",
                "src": "395:63:20",
                "text": " @dev Collection of functions related to array types."
              },
              "fullyImplemented": true,
              "id": 4619,
              "linearizedBaseContracts": [
                4619
              ],
              "name": "Arrays",
              "nameLocation": "467:6:20",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "global": false,
                  "id": 3655,
                  "libraryName": {
                    "id": 3653,
                    "name": "SlotDerivation",
                    "nameLocations": [
                      "486:14:20"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 4855,
                    "src": "486:14:20"
                  },
                  "nodeType": "UsingForDirective",
                  "src": "480:33:20",
                  "typeName": {
                    "id": 3654,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "505:7:20",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                },
                {
                  "global": false,
                  "id": 3658,
                  "libraryName": {
                    "id": 3656,
                    "name": "StorageSlot",
                    "nameLocations": [
                      "524:11:20"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 4979,
                    "src": "524:11:20"
                  },
                  "nodeType": "UsingForDirective",
                  "src": "518:30:20",
                  "typeName": {
                    "id": 3657,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "540:7:20",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                },
                {
                  "body": {
                    "id": 3690,
                    "nodeType": "Block",
                    "src": "1628:83:20",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 3680,
                                  "name": "array",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3662,
                                  "src": "1656:5:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                    "typeString": "uint256[] memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                    "typeString": "uint256[] memory"
                                  }
                                ],
                                "id": 3679,
                                "name": "_begin",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3915,
                                "src": "1649:6:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$",
                                  "typeString": "function (uint256[] memory) pure returns (uint256)"
                                }
                              },
                              "id": 3681,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1649:13:20",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "id": 3683,
                                  "name": "array",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3662,
                                  "src": "1669:5:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                    "typeString": "uint256[] memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                    "typeString": "uint256[] memory"
                                  }
                                ],
                                "id": 3682,
                                "name": "_end",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3935,
                                "src": "1664:4:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$",
                                  "typeString": "function (uint256[] memory) pure returns (uint256)"
                                }
                              },
                              "id": 3684,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1664:11:20",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 3685,
                              "name": "comp",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3672,
                              "src": "1677:4:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$",
                                "typeString": "function (uint256,uint256) pure returns (bool)"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$",
                                "typeString": "function (uint256,uint256) pure returns (bool)"
                              }
                            ],
                            "id": 3678,
                            "name": "_quickSort",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3904,
                            "src": "1638:10:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$_$returns$__$",
                              "typeString": "function (uint256,uint256,function (uint256,uint256) pure returns (bool)) pure"
                            }
                          },
                          "id": 3686,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1638:44:20",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3687,
                        "nodeType": "ExpressionStatement",
                        "src": "1638:44:20"
                      },
                      {
                        "expression": {
                          "id": 3688,
                          "name": "array",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3662,
                          "src": "1699:5:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                            "typeString": "uint256[] memory"
                          }
                        },
                        "functionReturnParameters": 3677,
                        "id": 3689,
                        "nodeType": "Return",
                        "src": "1692:12:20"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3659,
                    "nodeType": "StructuredDocumentation",
                    "src": "554:915:20",
                    "text": " @dev Sort an array of uint256 (in memory) following the provided comparator function.\n This function does the sorting \"in place\", meaning that it overrides the input. The object is returned for\n convenience, but that returned value can be discarded safely if the caller has a memory pointer to the array.\n NOTE: this function's cost is `O(n · log(n))` in average and `O(n²)` in the worst case, with n the length of the\n array. Using it in view functions that are executed through `eth_call` is safe, but one should be very careful\n when executing this as part of a transaction. If the array being sorted is too large, the sort operation may\n consume more gas than is available in a block, leading to potential DoS.\n IMPORTANT: Consider memory side-effects when using custom comparator functions that access memory in an unsafe way."
                  },
                  "id": 3691,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "sort",
                  "nameLocation": "1483:4:20",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3673,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3662,
                        "mutability": "mutable",
                        "name": "array",
                        "nameLocation": "1514:5:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 3691,
                        "src": "1497:22:20",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 3660,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "1497:7:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 3661,
                          "nodeType": "ArrayTypeName",
                          "src": "1497:9:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                            "typeString": "uint256[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3672,
                        "mutability": "mutable",
                        "name": "comp",
                        "nameLocation": "1576:4:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 3691,
                        "src": "1529:51:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$",
                          "typeString": "function (uint256,uint256) pure returns (bool)"
                        },
                        "typeName": {
                          "id": 3671,
                          "nodeType": "FunctionTypeName",
                          "parameterTypes": {
                            "id": 3667,
                            "nodeType": "ParameterList",
                            "parameters": [
                              {
                                "constant": false,
                                "id": 3664,
                                "mutability": "mutable",
                                "name": "",
                                "nameLocation": "-1:-1:-1",
                                "nodeType": "VariableDeclaration",
                                "scope": 3671,
                                "src": "1538:7:20",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 3663,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "1538:7:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              },
                              {
                                "constant": false,
                                "id": 3666,
                                "mutability": "mutable",
                                "name": "",
                                "nameLocation": "-1:-1:-1",
                                "nodeType": "VariableDeclaration",
                                "scope": 3671,
                                "src": "1547:7:20",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 3665,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "1547:7:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "src": "1537:18:20"
                          },
                          "returnParameterTypes": {
                            "id": 3670,
                            "nodeType": "ParameterList",
                            "parameters": [
                              {
                                "constant": false,
                                "id": 3669,
                                "mutability": "mutable",
                                "name": "",
                                "nameLocation": "-1:-1:-1",
                                "nodeType": "VariableDeclaration",
                                "scope": 3671,
                                "src": "1570:4:20",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "typeName": {
                                  "id": 3668,
                                  "name": "bool",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "1570:4:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "src": "1569:6:20"
                          },
                          "src": "1529:51:20",
                          "stateMutability": "pure",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (uint256,uint256) pure returns (bool)"
                          },
                          "visibility": "internal"
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1487:99:20"
                  },
                  "returnParameters": {
                    "id": 3677,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3676,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 3691,
                        "src": "1610:16:20",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 3674,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "1610:7:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 3675,
                          "nodeType": "ArrayTypeName",
                          "src": "1610:9:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                            "typeString": "uint256[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1609:18:20"
                  },
                  "scope": 4619,
                  "src": "1474:237:20",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 3709,
                    "nodeType": "Block",
                    "src": "1894:66:20",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 3702,
                              "name": "array",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3695,
                              "src": "1909:5:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            },
                            {
                              "expression": {
                                "id": 3703,
                                "name": "Comparators",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4651,
                                "src": "1916:11:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_Comparators_$4651_$",
                                  "typeString": "type(library Comparators)"
                                }
                              },
                              "id": 3704,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "1928:2:20",
                              "memberName": "lt",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 4636,
                              "src": "1916:14:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$",
                                "typeString": "function (uint256,uint256) pure returns (bool)"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              },
                              {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$",
                                "typeString": "function (uint256,uint256) pure returns (bool)"
                              }
                            ],
                            "id": 3701,
                            "name": "sort",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              3691,
                              3710,
                              3742,
                              3763,
                              3795,
                              3816
                            ],
                            "referencedDeclaration": 3691,
                            "src": "1904:4:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                              "typeString": "function (uint256[] memory,function (uint256,uint256) pure returns (bool)) pure returns (uint256[] memory)"
                            }
                          },
                          "id": 3705,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1904:27:20",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                            "typeString": "uint256[] memory"
                          }
                        },
                        "id": 3706,
                        "nodeType": "ExpressionStatement",
                        "src": "1904:27:20"
                      },
                      {
                        "expression": {
                          "id": 3707,
                          "name": "array",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3695,
                          "src": "1948:5:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                            "typeString": "uint256[] memory"
                          }
                        },
                        "functionReturnParameters": 3700,
                        "id": 3708,
                        "nodeType": "Return",
                        "src": "1941:12:20"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3692,
                    "nodeType": "StructuredDocumentation",
                    "src": "1717:93:20",
                    "text": " @dev Variant of {sort} that sorts an array of uint256 in increasing order."
                  },
                  "id": 3710,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "sort",
                  "nameLocation": "1824:4:20",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3696,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3695,
                        "mutability": "mutable",
                        "name": "array",
                        "nameLocation": "1846:5:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 3710,
                        "src": "1829:22:20",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 3693,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "1829:7:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 3694,
                          "nodeType": "ArrayTypeName",
                          "src": "1829:9:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                            "typeString": "uint256[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1828:24:20"
                  },
                  "returnParameters": {
                    "id": 3700,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3699,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 3710,
                        "src": "1876:16:20",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 3697,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "1876:7:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 3698,
                          "nodeType": "ArrayTypeName",
                          "src": "1876:9:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                            "typeString": "uint256[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1875:18:20"
                  },
                  "scope": 4619,
                  "src": "1815:145:20",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 3741,
                    "nodeType": "Block",
                    "src": "3040:97:20",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 3732,
                                  "name": "array",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3714,
                                  "src": "3075:5:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                    "typeString": "address[] memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                    "typeString": "address[] memory"
                                  }
                                ],
                                "id": 3731,
                                "name": "_castToUint256Array",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [
                                  3967,
                                  3979
                                ],
                                "referencedDeclaration": 3967,
                                "src": "3055:19:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_array$_t_address_$dyn_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                                  "typeString": "function (address[] memory) pure returns (uint256[] memory)"
                                }
                              },
                              "id": 3733,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3055:26:20",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "id": 3735,
                                  "name": "comp",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3724,
                                  "src": "3102:4:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$returns$_t_bool_$",
                                    "typeString": "function (address,address) pure returns (bool)"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$returns$_t_bool_$",
                                    "typeString": "function (address,address) pure returns (bool)"
                                  }
                                ],
                                "id": 3734,
                                "name": "_castToUint256Comp",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [
                                  4005,
                                  4031
                                ],
                                "referencedDeclaration": 4005,
                                "src": "3083:18:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_function_internal_pure$_t_address_$_t_address_$returns$_t_bool_$_$returns$_t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$_$",
                                  "typeString": "function (function (address,address) pure returns (bool)) pure returns (function (uint256,uint256) pure returns (bool))"
                                }
                              },
                              "id": 3736,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3083:24:20",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$",
                                "typeString": "function (uint256,uint256) pure returns (bool)"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              },
                              {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$",
                                "typeString": "function (uint256,uint256) pure returns (bool)"
                              }
                            ],
                            "id": 3730,
                            "name": "sort",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              3691,
                              3710,
                              3742,
                              3763,
                              3795,
                              3816
                            ],
                            "referencedDeclaration": 3691,
                            "src": "3050:4:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                              "typeString": "function (uint256[] memory,function (uint256,uint256) pure returns (bool)) pure returns (uint256[] memory)"
                            }
                          },
                          "id": 3737,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3050:58:20",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                            "typeString": "uint256[] memory"
                          }
                        },
                        "id": 3738,
                        "nodeType": "ExpressionStatement",
                        "src": "3050:58:20"
                      },
                      {
                        "expression": {
                          "id": 3739,
                          "name": "array",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3714,
                          "src": "3125:5:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                            "typeString": "address[] memory"
                          }
                        },
                        "functionReturnParameters": 3729,
                        "id": 3740,
                        "nodeType": "Return",
                        "src": "3118:12:20"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3711,
                    "nodeType": "StructuredDocumentation",
                    "src": "1966:915:20",
                    "text": " @dev Sort an array of address (in memory) following the provided comparator function.\n This function does the sorting \"in place\", meaning that it overrides the input. The object is returned for\n convenience, but that returned value can be discarded safely if the caller has a memory pointer to the array.\n NOTE: this function's cost is `O(n · log(n))` in average and `O(n²)` in the worst case, with n the length of the\n array. Using it in view functions that are executed through `eth_call` is safe, but one should be very careful\n when executing this as part of a transaction. If the array being sorted is too large, the sort operation may\n consume more gas than is available in a block, leading to potential DoS.\n IMPORTANT: Consider memory side-effects when using custom comparator functions that access memory in an unsafe way."
                  },
                  "id": 3742,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "sort",
                  "nameLocation": "2895:4:20",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3725,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3714,
                        "mutability": "mutable",
                        "name": "array",
                        "nameLocation": "2926:5:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 3742,
                        "src": "2909:22:20",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 3712,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "2909:7:20",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 3713,
                          "nodeType": "ArrayTypeName",
                          "src": "2909:9:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                            "typeString": "address[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3724,
                        "mutability": "mutable",
                        "name": "comp",
                        "nameLocation": "2988:4:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 3742,
                        "src": "2941:51:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$returns$_t_bool_$",
                          "typeString": "function (address,address) pure returns (bool)"
                        },
                        "typeName": {
                          "id": 3723,
                          "nodeType": "FunctionTypeName",
                          "parameterTypes": {
                            "id": 3719,
                            "nodeType": "ParameterList",
                            "parameters": [
                              {
                                "constant": false,
                                "id": 3716,
                                "mutability": "mutable",
                                "name": "",
                                "nameLocation": "-1:-1:-1",
                                "nodeType": "VariableDeclaration",
                                "scope": 3723,
                                "src": "2950:7:20",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                "typeName": {
                                  "id": 3715,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "2950:7:20",
                                  "stateMutability": "nonpayable",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "visibility": "internal"
                              },
                              {
                                "constant": false,
                                "id": 3718,
                                "mutability": "mutable",
                                "name": "",
                                "nameLocation": "-1:-1:-1",
                                "nodeType": "VariableDeclaration",
                                "scope": 3723,
                                "src": "2959:7:20",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                "typeName": {
                                  "id": 3717,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "2959:7:20",
                                  "stateMutability": "nonpayable",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "src": "2949:18:20"
                          },
                          "returnParameterTypes": {
                            "id": 3722,
                            "nodeType": "ParameterList",
                            "parameters": [
                              {
                                "constant": false,
                                "id": 3721,
                                "mutability": "mutable",
                                "name": "",
                                "nameLocation": "-1:-1:-1",
                                "nodeType": "VariableDeclaration",
                                "scope": 3723,
                                "src": "2982:4:20",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "typeName": {
                                  "id": 3720,
                                  "name": "bool",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "2982:4:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "src": "2981:6:20"
                          },
                          "src": "2941:51:20",
                          "stateMutability": "pure",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$returns$_t_bool_$",
                            "typeString": "function (address,address) pure returns (bool)"
                          },
                          "visibility": "internal"
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2899:99:20"
                  },
                  "returnParameters": {
                    "id": 3729,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3728,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 3742,
                        "src": "3022:16:20",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 3726,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "3022:7:20",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 3727,
                          "nodeType": "ArrayTypeName",
                          "src": "3022:9:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                            "typeString": "address[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3021:18:20"
                  },
                  "scope": 4619,
                  "src": "2886:251:20",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 3762,
                    "nodeType": "Block",
                    "src": "3320:87:20",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 3754,
                                  "name": "array",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3746,
                                  "src": "3355:5:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                    "typeString": "address[] memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                    "typeString": "address[] memory"
                                  }
                                ],
                                "id": 3753,
                                "name": "_castToUint256Array",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [
                                  3967,
                                  3979
                                ],
                                "referencedDeclaration": 3967,
                                "src": "3335:19:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_array$_t_address_$dyn_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                                  "typeString": "function (address[] memory) pure returns (uint256[] memory)"
                                }
                              },
                              "id": 3755,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3335:26:20",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            },
                            {
                              "expression": {
                                "id": 3756,
                                "name": "Comparators",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4651,
                                "src": "3363:11:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_Comparators_$4651_$",
                                  "typeString": "type(library Comparators)"
                                }
                              },
                              "id": 3757,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "3375:2:20",
                              "memberName": "lt",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 4636,
                              "src": "3363:14:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$",
                                "typeString": "function (uint256,uint256) pure returns (bool)"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              },
                              {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$",
                                "typeString": "function (uint256,uint256) pure returns (bool)"
                              }
                            ],
                            "id": 3752,
                            "name": "sort",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              3691,
                              3710,
                              3742,
                              3763,
                              3795,
                              3816
                            ],
                            "referencedDeclaration": 3691,
                            "src": "3330:4:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                              "typeString": "function (uint256[] memory,function (uint256,uint256) pure returns (bool)) pure returns (uint256[] memory)"
                            }
                          },
                          "id": 3758,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3330:48:20",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                            "typeString": "uint256[] memory"
                          }
                        },
                        "id": 3759,
                        "nodeType": "ExpressionStatement",
                        "src": "3330:48:20"
                      },
                      {
                        "expression": {
                          "id": 3760,
                          "name": "array",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3746,
                          "src": "3395:5:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                            "typeString": "address[] memory"
                          }
                        },
                        "functionReturnParameters": 3751,
                        "id": 3761,
                        "nodeType": "Return",
                        "src": "3388:12:20"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3743,
                    "nodeType": "StructuredDocumentation",
                    "src": "3143:93:20",
                    "text": " @dev Variant of {sort} that sorts an array of address in increasing order."
                  },
                  "id": 3763,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "sort",
                  "nameLocation": "3250:4:20",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3747,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3746,
                        "mutability": "mutable",
                        "name": "array",
                        "nameLocation": "3272:5:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 3763,
                        "src": "3255:22:20",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 3744,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "3255:7:20",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 3745,
                          "nodeType": "ArrayTypeName",
                          "src": "3255:9:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                            "typeString": "address[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3254:24:20"
                  },
                  "returnParameters": {
                    "id": 3751,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3750,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 3763,
                        "src": "3302:16:20",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 3748,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "3302:7:20",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 3749,
                          "nodeType": "ArrayTypeName",
                          "src": "3302:9:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                            "typeString": "address[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3301:18:20"
                  },
                  "scope": 4619,
                  "src": "3241:166:20",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 3794,
                    "nodeType": "Block",
                    "src": "4487:97:20",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 3785,
                                  "name": "array",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3767,
                                  "src": "4522:5:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                    "typeString": "bytes32[] memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                    "typeString": "bytes32[] memory"
                                  }
                                ],
                                "id": 3784,
                                "name": "_castToUint256Array",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [
                                  3967,
                                  3979
                                ],
                                "referencedDeclaration": 3979,
                                "src": "4502:19:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_array$_t_bytes32_$dyn_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                                  "typeString": "function (bytes32[] memory) pure returns (uint256[] memory)"
                                }
                              },
                              "id": 3786,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4502:26:20",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "id": 3788,
                                  "name": "comp",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3777,
                                  "src": "4549:4:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes32_$returns$_t_bool_$",
                                    "typeString": "function (bytes32,bytes32) pure returns (bool)"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes32_$returns$_t_bool_$",
                                    "typeString": "function (bytes32,bytes32) pure returns (bool)"
                                  }
                                ],
                                "id": 3787,
                                "name": "_castToUint256Comp",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [
                                  4005,
                                  4031
                                ],
                                "referencedDeclaration": 4031,
                                "src": "4530:18:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_function_internal_pure$_t_bytes32_$_t_bytes32_$returns$_t_bool_$_$returns$_t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$_$",
                                  "typeString": "function (function (bytes32,bytes32) pure returns (bool)) pure returns (function (uint256,uint256) pure returns (bool))"
                                }
                              },
                              "id": 3789,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4530:24:20",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$",
                                "typeString": "function (uint256,uint256) pure returns (bool)"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              },
                              {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$",
                                "typeString": "function (uint256,uint256) pure returns (bool)"
                              }
                            ],
                            "id": 3783,
                            "name": "sort",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              3691,
                              3710,
                              3742,
                              3763,
                              3795,
                              3816
                            ],
                            "referencedDeclaration": 3691,
                            "src": "4497:4:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                              "typeString": "function (uint256[] memory,function (uint256,uint256) pure returns (bool)) pure returns (uint256[] memory)"
                            }
                          },
                          "id": 3790,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4497:58:20",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                            "typeString": "uint256[] memory"
                          }
                        },
                        "id": 3791,
                        "nodeType": "ExpressionStatement",
                        "src": "4497:58:20"
                      },
                      {
                        "expression": {
                          "id": 3792,
                          "name": "array",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3767,
                          "src": "4572:5:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                            "typeString": "bytes32[] memory"
                          }
                        },
                        "functionReturnParameters": 3782,
                        "id": 3793,
                        "nodeType": "Return",
                        "src": "4565:12:20"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3764,
                    "nodeType": "StructuredDocumentation",
                    "src": "3413:915:20",
                    "text": " @dev Sort an array of bytes32 (in memory) following the provided comparator function.\n This function does the sorting \"in place\", meaning that it overrides the input. The object is returned for\n convenience, but that returned value can be discarded safely if the caller has a memory pointer to the array.\n NOTE: this function's cost is `O(n · log(n))` in average and `O(n²)` in the worst case, with n the length of the\n array. Using it in view functions that are executed through `eth_call` is safe, but one should be very careful\n when executing this as part of a transaction. If the array being sorted is too large, the sort operation may\n consume more gas than is available in a block, leading to potential DoS.\n IMPORTANT: Consider memory side-effects when using custom comparator functions that access memory in an unsafe way."
                  },
                  "id": 3795,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "sort",
                  "nameLocation": "4342:4:20",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3778,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3767,
                        "mutability": "mutable",
                        "name": "array",
                        "nameLocation": "4373:5:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 3795,
                        "src": "4356:22:20",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 3765,
                            "name": "bytes32",
                            "nodeType": "ElementaryTypeName",
                            "src": "4356:7:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "id": 3766,
                          "nodeType": "ArrayTypeName",
                          "src": "4356:9:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                            "typeString": "bytes32[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3777,
                        "mutability": "mutable",
                        "name": "comp",
                        "nameLocation": "4435:4:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 3795,
                        "src": "4388:51:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes32_$returns$_t_bool_$",
                          "typeString": "function (bytes32,bytes32) pure returns (bool)"
                        },
                        "typeName": {
                          "id": 3776,
                          "nodeType": "FunctionTypeName",
                          "parameterTypes": {
                            "id": 3772,
                            "nodeType": "ParameterList",
                            "parameters": [
                              {
                                "constant": false,
                                "id": 3769,
                                "mutability": "mutable",
                                "name": "",
                                "nameLocation": "-1:-1:-1",
                                "nodeType": "VariableDeclaration",
                                "scope": 3776,
                                "src": "4397:7:20",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                "typeName": {
                                  "id": 3768,
                                  "name": "bytes32",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "4397:7:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "visibility": "internal"
                              },
                              {
                                "constant": false,
                                "id": 3771,
                                "mutability": "mutable",
                                "name": "",
                                "nameLocation": "-1:-1:-1",
                                "nodeType": "VariableDeclaration",
                                "scope": 3776,
                                "src": "4406:7:20",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                "typeName": {
                                  "id": 3770,
                                  "name": "bytes32",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "4406:7:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "src": "4396:18:20"
                          },
                          "returnParameterTypes": {
                            "id": 3775,
                            "nodeType": "ParameterList",
                            "parameters": [
                              {
                                "constant": false,
                                "id": 3774,
                                "mutability": "mutable",
                                "name": "",
                                "nameLocation": "-1:-1:-1",
                                "nodeType": "VariableDeclaration",
                                "scope": 3776,
                                "src": "4429:4:20",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "typeName": {
                                  "id": 3773,
                                  "name": "bool",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "4429:4:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "src": "4428:6:20"
                          },
                          "src": "4388:51:20",
                          "stateMutability": "pure",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes32_$returns$_t_bool_$",
                            "typeString": "function (bytes32,bytes32) pure returns (bool)"
                          },
                          "visibility": "internal"
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4346:99:20"
                  },
                  "returnParameters": {
                    "id": 3782,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3781,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 3795,
                        "src": "4469:16:20",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 3779,
                            "name": "bytes32",
                            "nodeType": "ElementaryTypeName",
                            "src": "4469:7:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "id": 3780,
                          "nodeType": "ArrayTypeName",
                          "src": "4469:9:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                            "typeString": "bytes32[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4468:18:20"
                  },
                  "scope": 4619,
                  "src": "4333:251:20",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 3815,
                    "nodeType": "Block",
                    "src": "4767:87:20",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 3807,
                                  "name": "array",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3799,
                                  "src": "4802:5:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                    "typeString": "bytes32[] memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                    "typeString": "bytes32[] memory"
                                  }
                                ],
                                "id": 3806,
                                "name": "_castToUint256Array",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [
                                  3967,
                                  3979
                                ],
                                "referencedDeclaration": 3979,
                                "src": "4782:19:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_array$_t_bytes32_$dyn_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                                  "typeString": "function (bytes32[] memory) pure returns (uint256[] memory)"
                                }
                              },
                              "id": 3808,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4782:26:20",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            },
                            {
                              "expression": {
                                "id": 3809,
                                "name": "Comparators",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4651,
                                "src": "4810:11:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_Comparators_$4651_$",
                                  "typeString": "type(library Comparators)"
                                }
                              },
                              "id": 3810,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "4822:2:20",
                              "memberName": "lt",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 4636,
                              "src": "4810:14:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$",
                                "typeString": "function (uint256,uint256) pure returns (bool)"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              },
                              {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$",
                                "typeString": "function (uint256,uint256) pure returns (bool)"
                              }
                            ],
                            "id": 3805,
                            "name": "sort",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              3691,
                              3710,
                              3742,
                              3763,
                              3795,
                              3816
                            ],
                            "referencedDeclaration": 3691,
                            "src": "4777:4:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                              "typeString": "function (uint256[] memory,function (uint256,uint256) pure returns (bool)) pure returns (uint256[] memory)"
                            }
                          },
                          "id": 3811,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4777:48:20",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                            "typeString": "uint256[] memory"
                          }
                        },
                        "id": 3812,
                        "nodeType": "ExpressionStatement",
                        "src": "4777:48:20"
                      },
                      {
                        "expression": {
                          "id": 3813,
                          "name": "array",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3799,
                          "src": "4842:5:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                            "typeString": "bytes32[] memory"
                          }
                        },
                        "functionReturnParameters": 3804,
                        "id": 3814,
                        "nodeType": "Return",
                        "src": "4835:12:20"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3796,
                    "nodeType": "StructuredDocumentation",
                    "src": "4590:93:20",
                    "text": " @dev Variant of {sort} that sorts an array of bytes32 in increasing order."
                  },
                  "id": 3816,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "sort",
                  "nameLocation": "4697:4:20",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3800,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3799,
                        "mutability": "mutable",
                        "name": "array",
                        "nameLocation": "4719:5:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 3816,
                        "src": "4702:22:20",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 3797,
                            "name": "bytes32",
                            "nodeType": "ElementaryTypeName",
                            "src": "4702:7:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "id": 3798,
                          "nodeType": "ArrayTypeName",
                          "src": "4702:9:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                            "typeString": "bytes32[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4701:24:20"
                  },
                  "returnParameters": {
                    "id": 3804,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3803,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 3816,
                        "src": "4749:16:20",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 3801,
                            "name": "bytes32",
                            "nodeType": "ElementaryTypeName",
                            "src": "4749:7:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "id": 3802,
                          "nodeType": "ArrayTypeName",
                          "src": "4749:9:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                            "typeString": "bytes32[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4748:18:20"
                  },
                  "scope": 4619,
                  "src": "4688:166:20",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 3903,
                    "nodeType": "Block",
                    "src": "5470:889:20",
                    "statements": [
                      {
                        "id": 3902,
                        "nodeType": "UncheckedBlock",
                        "src": "5480:873:20",
                        "statements": [
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 3838,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 3836,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 3834,
                                  "name": "end",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3821,
                                  "src": "5508:3:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "id": 3835,
                                  "name": "begin",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3819,
                                  "src": "5514:5:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "5508:11:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<",
                              "rightExpression": {
                                "hexValue": "30783430",
                                "id": 3837,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "5522:4:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_64_by_1",
                                  "typeString": "int_const 64"
                                },
                                "value": "0x40"
                              },
                              "src": "5508:18:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 3840,
                            "nodeType": "IfStatement",
                            "src": "5504:31:20",
                            "trueBody": {
                              "functionReturnParameters": 3833,
                              "id": 3839,
                              "nodeType": "Return",
                              "src": "5528:7:20"
                            }
                          },
                          {
                            "assignments": [
                              3842
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 3842,
                                "mutability": "mutable",
                                "name": "pivot",
                                "nameLocation": "5599:5:20",
                                "nodeType": "VariableDeclaration",
                                "scope": 3902,
                                "src": "5591:13:20",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 3841,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "5591:7:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 3846,
                            "initialValue": {
                              "arguments": [
                                {
                                  "id": 3844,
                                  "name": "begin",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3819,
                                  "src": "5614:5:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 3843,
                                "name": "_mload",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3945,
                                "src": "5607:6:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (uint256) pure returns (uint256)"
                                }
                              },
                              "id": 3845,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5607:13:20",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "5591:29:20"
                          },
                          {
                            "assignments": [
                              3848
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 3848,
                                "mutability": "mutable",
                                "name": "pos",
                                "nameLocation": "5715:3:20",
                                "nodeType": "VariableDeclaration",
                                "scope": 3902,
                                "src": "5707:11:20",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 3847,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "5707:7:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 3850,
                            "initialValue": {
                              "id": 3849,
                              "name": "begin",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3819,
                              "src": "5721:5:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "5707:19:20"
                          },
                          {
                            "body": {
                              "id": 3881,
                              "nodeType": "Block",
                              "src": "5795:331:20",
                              "statements": [
                                {
                                  "condition": {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "id": 3866,
                                            "name": "it",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3852,
                                            "src": "5829:2:20",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "id": 3865,
                                          "name": "_mload",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 3945,
                                          "src": "5822:6:20",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$",
                                            "typeString": "function (uint256) pure returns (uint256)"
                                          }
                                        },
                                        "id": 3867,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "nameLocations": [],
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "5822:10:20",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      {
                                        "id": 3868,
                                        "name": "pivot",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3842,
                                        "src": "5834:5:20",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "id": 3864,
                                      "name": "comp",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3831,
                                      "src": "5817:4:20",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$",
                                        "typeString": "function (uint256,uint256) pure returns (bool)"
                                      }
                                    },
                                    "id": 3869,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "5817:23:20",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "id": 3880,
                                  "nodeType": "IfStatement",
                                  "src": "5813:299:20",
                                  "trueBody": {
                                    "id": 3879,
                                    "nodeType": "Block",
                                    "src": "5842:270:20",
                                    "statements": [
                                      {
                                        "expression": {
                                          "id": 3872,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftHandSide": {
                                            "id": 3870,
                                            "name": "pos",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3848,
                                            "src": "6046:3:20",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "Assignment",
                                          "operator": "+=",
                                          "rightHandSide": {
                                            "hexValue": "30783230",
                                            "id": 3871,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "6053:4:20",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_32_by_1",
                                              "typeString": "int_const 32"
                                            },
                                            "value": "0x20"
                                          },
                                          "src": "6046:11:20",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "id": 3873,
                                        "nodeType": "ExpressionStatement",
                                        "src": "6046:11:20"
                                      },
                                      {
                                        "expression": {
                                          "arguments": [
                                            {
                                              "id": 3875,
                                              "name": "pos",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 3848,
                                              "src": "6085:3:20",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            {
                                              "id": 3876,
                                              "name": "it",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 3852,
                                              "src": "6090:2:20",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": [
                                              {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              },
                                              {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            ],
                                            "id": 3874,
                                            "name": "_swap",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3955,
                                            "src": "6079:5:20",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$__$",
                                              "typeString": "function (uint256,uint256) pure"
                                            }
                                          },
                                          "id": 3877,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "kind": "functionCall",
                                          "lValueRequested": false,
                                          "nameLocations": [],
                                          "names": [],
                                          "nodeType": "FunctionCall",
                                          "src": "6079:14:20",
                                          "tryCall": false,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                          }
                                        },
                                        "id": 3878,
                                        "nodeType": "ExpressionStatement",
                                        "src": "6079:14:20"
                                      }
                                    ]
                                  }
                                }
                              ]
                            },
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 3859,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 3857,
                                "name": "it",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3852,
                                "src": "5773:2:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<",
                              "rightExpression": {
                                "id": 3858,
                                "name": "end",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3821,
                                "src": "5778:3:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "5773:8:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 3882,
                            "initializationExpression": {
                              "assignments": [
                                3852
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 3852,
                                  "mutability": "mutable",
                                  "name": "it",
                                  "nameLocation": "5754:2:20",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 3882,
                                  "src": "5746:10:20",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 3851,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "5746:7:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 3856,
                              "initialValue": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 3855,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 3853,
                                  "name": "begin",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3819,
                                  "src": "5759:5:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "+",
                                "rightExpression": {
                                  "hexValue": "30783230",
                                  "id": 3854,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "5767:4:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_32_by_1",
                                    "typeString": "int_const 32"
                                  },
                                  "value": "0x20"
                                },
                                "src": "5759:12:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "5746:25:20"
                            },
                            "isSimpleCounterLoop": false,
                            "loopExpression": {
                              "expression": {
                                "id": 3862,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 3860,
                                  "name": "it",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3852,
                                  "src": "5783:2:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "+=",
                                "rightHandSide": {
                                  "hexValue": "30783230",
                                  "id": 3861,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "5789:4:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_32_by_1",
                                    "typeString": "int_const 32"
                                  },
                                  "value": "0x20"
                                },
                                "src": "5783:10:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 3863,
                              "nodeType": "ExpressionStatement",
                              "src": "5783:10:20"
                            },
                            "nodeType": "ForStatement",
                            "src": "5741:385:20"
                          },
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 3884,
                                  "name": "begin",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3819,
                                  "src": "6146:5:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "id": 3885,
                                  "name": "pos",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3848,
                                  "src": "6153:3:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 3883,
                                "name": "_swap",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3955,
                                "src": "6140:5:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$__$",
                                  "typeString": "function (uint256,uint256) pure"
                                }
                              },
                              "id": 3886,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6140:17:20",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 3887,
                            "nodeType": "ExpressionStatement",
                            "src": "6140:17:20"
                          },
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 3889,
                                  "name": "begin",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3819,
                                  "src": "6207:5:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "id": 3890,
                                  "name": "pos",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3848,
                                  "src": "6214:3:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "id": 3891,
                                  "name": "comp",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3831,
                                  "src": "6219:4:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$",
                                    "typeString": "function (uint256,uint256) pure returns (bool)"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$",
                                    "typeString": "function (uint256,uint256) pure returns (bool)"
                                  }
                                ],
                                "id": 3888,
                                "name": "_quickSort",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3904,
                                "src": "6196:10:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$_$returns$__$",
                                  "typeString": "function (uint256,uint256,function (uint256,uint256) pure returns (bool)) pure"
                                }
                              },
                              "id": 3892,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6196:28:20",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 3893,
                            "nodeType": "ExpressionStatement",
                            "src": "6196:28:20"
                          },
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 3897,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 3895,
                                    "name": "pos",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3848,
                                    "src": "6284:3:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "+",
                                  "rightExpression": {
                                    "hexValue": "30783230",
                                    "id": 3896,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "6290:4:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_32_by_1",
                                      "typeString": "int_const 32"
                                    },
                                    "value": "0x20"
                                  },
                                  "src": "6284:10:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "id": 3898,
                                  "name": "end",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3821,
                                  "src": "6296:3:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "id": 3899,
                                  "name": "comp",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3831,
                                  "src": "6301:4:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$",
                                    "typeString": "function (uint256,uint256) pure returns (bool)"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$",
                                    "typeString": "function (uint256,uint256) pure returns (bool)"
                                  }
                                ],
                                "id": 3894,
                                "name": "_quickSort",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3904,
                                "src": "6273:10:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$_$returns$__$",
                                  "typeString": "function (uint256,uint256,function (uint256,uint256) pure returns (bool)) pure"
                                }
                              },
                              "id": 3900,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6273:33:20",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 3901,
                            "nodeType": "ExpressionStatement",
                            "src": "6273:33:20"
                          }
                        ]
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3817,
                    "nodeType": "StructuredDocumentation",
                    "src": "4860:491:20",
                    "text": " @dev Performs a quick sort of a segment of memory. The segment sorted starts at `begin` (inclusive), and stops\n at end (exclusive). Sorting follows the `comp` comparator.\n Invariant: `begin <= end`. This is the case when initially called by {sort} and is preserved in subcalls.\n IMPORTANT: Memory locations between `begin` and `end` are not validated/zeroed. This function should\n be used only if the limits are within a memory array."
                  },
                  "id": 3904,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_quickSort",
                  "nameLocation": "5365:10:20",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3832,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3819,
                        "mutability": "mutable",
                        "name": "begin",
                        "nameLocation": "5384:5:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 3904,
                        "src": "5376:13:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3818,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5376:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3821,
                        "mutability": "mutable",
                        "name": "end",
                        "nameLocation": "5399:3:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 3904,
                        "src": "5391:11:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3820,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5391:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3831,
                        "mutability": "mutable",
                        "name": "comp",
                        "nameLocation": "5451:4:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 3904,
                        "src": "5404:51:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$",
                          "typeString": "function (uint256,uint256) pure returns (bool)"
                        },
                        "typeName": {
                          "id": 3830,
                          "nodeType": "FunctionTypeName",
                          "parameterTypes": {
                            "id": 3826,
                            "nodeType": "ParameterList",
                            "parameters": [
                              {
                                "constant": false,
                                "id": 3823,
                                "mutability": "mutable",
                                "name": "",
                                "nameLocation": "-1:-1:-1",
                                "nodeType": "VariableDeclaration",
                                "scope": 3830,
                                "src": "5413:7:20",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 3822,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "5413:7:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              },
                              {
                                "constant": false,
                                "id": 3825,
                                "mutability": "mutable",
                                "name": "",
                                "nameLocation": "-1:-1:-1",
                                "nodeType": "VariableDeclaration",
                                "scope": 3830,
                                "src": "5422:7:20",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 3824,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "5422:7:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "src": "5412:18:20"
                          },
                          "returnParameterTypes": {
                            "id": 3829,
                            "nodeType": "ParameterList",
                            "parameters": [
                              {
                                "constant": false,
                                "id": 3828,
                                "mutability": "mutable",
                                "name": "",
                                "nameLocation": "-1:-1:-1",
                                "nodeType": "VariableDeclaration",
                                "scope": 3830,
                                "src": "5445:4:20",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "typeName": {
                                  "id": 3827,
                                  "name": "bool",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "5445:4:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "src": "5444:6:20"
                          },
                          "src": "5404:51:20",
                          "stateMutability": "pure",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (uint256,uint256) pure returns (bool)"
                          },
                          "visibility": "internal"
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5375:81:20"
                  },
                  "returnParameters": {
                    "id": 3833,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "5470:0:20"
                  },
                  "scope": 4619,
                  "src": "5356:1003:20",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 3914,
                    "nodeType": "Block",
                    "src": "6532:88:20",
                    "statements": [
                      {
                        "AST": {
                          "nativeSrc": "6567:47:20",
                          "nodeType": "YulBlock",
                          "src": "6567:47:20",
                          "statements": [
                            {
                              "nativeSrc": "6581:23:20",
                              "nodeType": "YulAssignment",
                              "src": "6581:23:20",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "array",
                                    "nativeSrc": "6592:5:20",
                                    "nodeType": "YulIdentifier",
                                    "src": "6592:5:20"
                                  },
                                  {
                                    "kind": "number",
                                    "nativeSrc": "6599:4:20",
                                    "nodeType": "YulLiteral",
                                    "src": "6599:4:20",
                                    "type": "",
                                    "value": "0x20"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nativeSrc": "6588:3:20",
                                  "nodeType": "YulIdentifier",
                                  "src": "6588:3:20"
                                },
                                "nativeSrc": "6588:16:20",
                                "nodeType": "YulFunctionCall",
                                "src": "6588:16:20"
                              },
                              "variableNames": [
                                {
                                  "name": "ptr",
                                  "nativeSrc": "6581:3:20",
                                  "nodeType": "YulIdentifier",
                                  "src": "6581:3:20"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "paris",
                        "externalReferences": [
                          {
                            "declaration": 3908,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6592:5:20",
                            "valueSize": 1
                          },
                          {
                            "declaration": 3911,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6581:3:20",
                            "valueSize": 1
                          }
                        ],
                        "flags": [
                          "memory-safe"
                        ],
                        "id": 3913,
                        "nodeType": "InlineAssembly",
                        "src": "6542:72:20"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3905,
                    "nodeType": "StructuredDocumentation",
                    "src": "6365:87:20",
                    "text": " @dev Pointer to the memory location of the first element of `array`."
                  },
                  "id": 3915,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_begin",
                  "nameLocation": "6466:6:20",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3909,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3908,
                        "mutability": "mutable",
                        "name": "array",
                        "nameLocation": "6490:5:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 3915,
                        "src": "6473:22:20",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 3906,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "6473:7:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 3907,
                          "nodeType": "ArrayTypeName",
                          "src": "6473:9:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                            "typeString": "uint256[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6472:24:20"
                  },
                  "returnParameters": {
                    "id": 3912,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3911,
                        "mutability": "mutable",
                        "name": "ptr",
                        "nameLocation": "6527:3:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 3915,
                        "src": "6519:11:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3910,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6519:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6518:13:20"
                  },
                  "scope": 4619,
                  "src": "6457:163:20",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 3934,
                    "nodeType": "Block",
                    "src": "6892:93:20",
                    "statements": [
                      {
                        "id": 3933,
                        "nodeType": "UncheckedBlock",
                        "src": "6902:77:20",
                        "statements": [
                          {
                            "expression": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 3931,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "arguments": [
                                  {
                                    "id": 3925,
                                    "name": "array",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3919,
                                    "src": "6940:5:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                      "typeString": "uint256[] memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                      "typeString": "uint256[] memory"
                                    }
                                  ],
                                  "id": 3924,
                                  "name": "_begin",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3915,
                                  "src": "6933:6:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$",
                                    "typeString": "function (uint256[] memory) pure returns (uint256)"
                                  }
                                },
                                "id": 3926,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "6933:13:20",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 3930,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "expression": {
                                    "id": 3927,
                                    "name": "array",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3919,
                                    "src": "6949:5:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                      "typeString": "uint256[] memory"
                                    }
                                  },
                                  "id": 3928,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "6955:6:20",
                                  "memberName": "length",
                                  "nodeType": "MemberAccess",
                                  "src": "6949:12:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "*",
                                "rightExpression": {
                                  "hexValue": "30783230",
                                  "id": 3929,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "6964:4:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_32_by_1",
                                    "typeString": "int_const 32"
                                  },
                                  "value": "0x20"
                                },
                                "src": "6949:19:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "6933:35:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "functionReturnParameters": 3923,
                            "id": 3932,
                            "nodeType": "Return",
                            "src": "6926:42:20"
                          }
                        ]
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3916,
                    "nodeType": "StructuredDocumentation",
                    "src": "6626:188:20",
                    "text": " @dev Pointer to the memory location of the first memory word (32bytes) after `array`. This is the memory word\n that comes just after the last element of the array."
                  },
                  "id": 3935,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_end",
                  "nameLocation": "6828:4:20",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3920,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3919,
                        "mutability": "mutable",
                        "name": "array",
                        "nameLocation": "6850:5:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 3935,
                        "src": "6833:22:20",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 3917,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "6833:7:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 3918,
                          "nodeType": "ArrayTypeName",
                          "src": "6833:9:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                            "typeString": "uint256[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6832:24:20"
                  },
                  "returnParameters": {
                    "id": 3923,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3922,
                        "mutability": "mutable",
                        "name": "ptr",
                        "nameLocation": "6887:3:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 3935,
                        "src": "6879:11:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3921,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6879:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6878:13:20"
                  },
                  "scope": 4619,
                  "src": "6819:166:20",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 3944,
                    "nodeType": "Block",
                    "src": "7136:68:20",
                    "statements": [
                      {
                        "AST": {
                          "nativeSrc": "7155:43:20",
                          "nodeType": "YulBlock",
                          "src": "7155:43:20",
                          "statements": [
                            {
                              "nativeSrc": "7169:19:20",
                              "nodeType": "YulAssignment",
                              "src": "7169:19:20",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "ptr",
                                    "nativeSrc": "7184:3:20",
                                    "nodeType": "YulIdentifier",
                                    "src": "7184:3:20"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nativeSrc": "7178:5:20",
                                  "nodeType": "YulIdentifier",
                                  "src": "7178:5:20"
                                },
                                "nativeSrc": "7178:10:20",
                                "nodeType": "YulFunctionCall",
                                "src": "7178:10:20"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nativeSrc": "7169:5:20",
                                  "nodeType": "YulIdentifier",
                                  "src": "7169:5:20"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "paris",
                        "externalReferences": [
                          {
                            "declaration": 3938,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7184:3:20",
                            "valueSize": 1
                          },
                          {
                            "declaration": 3941,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7169:5:20",
                            "valueSize": 1
                          }
                        ],
                        "id": 3943,
                        "nodeType": "InlineAssembly",
                        "src": "7146:52:20"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3936,
                    "nodeType": "StructuredDocumentation",
                    "src": "6991:74:20",
                    "text": " @dev Load memory word (as a uint256) at location `ptr`."
                  },
                  "id": 3945,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_mload",
                  "nameLocation": "7079:6:20",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3939,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3938,
                        "mutability": "mutable",
                        "name": "ptr",
                        "nameLocation": "7094:3:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 3945,
                        "src": "7086:11:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3937,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7086:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7085:13:20"
                  },
                  "returnParameters": {
                    "id": 3942,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3941,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "7129:5:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 3945,
                        "src": "7121:13:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3940,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7121:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7120:15:20"
                  },
                  "scope": 4619,
                  "src": "7070:134:20",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 3954,
                    "nodeType": "Block",
                    "src": "7348:178:20",
                    "statements": [
                      {
                        "AST": {
                          "nativeSrc": "7367:153:20",
                          "nodeType": "YulBlock",
                          "src": "7367:153:20",
                          "statements": [
                            {
                              "nativeSrc": "7381:25:20",
                              "nodeType": "YulVariableDeclaration",
                              "src": "7381:25:20",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "ptr1",
                                    "nativeSrc": "7401:4:20",
                                    "nodeType": "YulIdentifier",
                                    "src": "7401:4:20"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nativeSrc": "7395:5:20",
                                  "nodeType": "YulIdentifier",
                                  "src": "7395:5:20"
                                },
                                "nativeSrc": "7395:11:20",
                                "nodeType": "YulFunctionCall",
                                "src": "7395:11:20"
                              },
                              "variables": [
                                {
                                  "name": "value1",
                                  "nativeSrc": "7385:6:20",
                                  "nodeType": "YulTypedName",
                                  "src": "7385:6:20",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nativeSrc": "7419:25:20",
                              "nodeType": "YulVariableDeclaration",
                              "src": "7419:25:20",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "ptr2",
                                    "nativeSrc": "7439:4:20",
                                    "nodeType": "YulIdentifier",
                                    "src": "7439:4:20"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nativeSrc": "7433:5:20",
                                  "nodeType": "YulIdentifier",
                                  "src": "7433:5:20"
                                },
                                "nativeSrc": "7433:11:20",
                                "nodeType": "YulFunctionCall",
                                "src": "7433:11:20"
                              },
                              "variables": [
                                {
                                  "name": "value2",
                                  "nativeSrc": "7423:6:20",
                                  "nodeType": "YulTypedName",
                                  "src": "7423:6:20",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "ptr1",
                                    "nativeSrc": "7464:4:20",
                                    "nodeType": "YulIdentifier",
                                    "src": "7464:4:20"
                                  },
                                  {
                                    "name": "value2",
                                    "nativeSrc": "7470:6:20",
                                    "nodeType": "YulIdentifier",
                                    "src": "7470:6:20"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nativeSrc": "7457:6:20",
                                  "nodeType": "YulIdentifier",
                                  "src": "7457:6:20"
                                },
                                "nativeSrc": "7457:20:20",
                                "nodeType": "YulFunctionCall",
                                "src": "7457:20:20"
                              },
                              "nativeSrc": "7457:20:20",
                              "nodeType": "YulExpressionStatement",
                              "src": "7457:20:20"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "ptr2",
                                    "nativeSrc": "7497:4:20",
                                    "nodeType": "YulIdentifier",
                                    "src": "7497:4:20"
                                  },
                                  {
                                    "name": "value1",
                                    "nativeSrc": "7503:6:20",
                                    "nodeType": "YulIdentifier",
                                    "src": "7503:6:20"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nativeSrc": "7490:6:20",
                                  "nodeType": "YulIdentifier",
                                  "src": "7490:6:20"
                                },
                                "nativeSrc": "7490:20:20",
                                "nodeType": "YulFunctionCall",
                                "src": "7490:20:20"
                              },
                              "nativeSrc": "7490:20:20",
                              "nodeType": "YulExpressionStatement",
                              "src": "7490:20:20"
                            }
                          ]
                        },
                        "evmVersion": "paris",
                        "externalReferences": [
                          {
                            "declaration": 3948,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7401:4:20",
                            "valueSize": 1
                          },
                          {
                            "declaration": 3948,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7464:4:20",
                            "valueSize": 1
                          },
                          {
                            "declaration": 3950,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7439:4:20",
                            "valueSize": 1
                          },
                          {
                            "declaration": 3950,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7497:4:20",
                            "valueSize": 1
                          }
                        ],
                        "id": 3953,
                        "nodeType": "InlineAssembly",
                        "src": "7358:162:20"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3946,
                    "nodeType": "StructuredDocumentation",
                    "src": "7210:77:20",
                    "text": " @dev Swaps the elements memory location `ptr1` and `ptr2`."
                  },
                  "id": 3955,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_swap",
                  "nameLocation": "7301:5:20",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3951,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3948,
                        "mutability": "mutable",
                        "name": "ptr1",
                        "nameLocation": "7315:4:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 3955,
                        "src": "7307:12:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3947,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7307:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 3950,
                        "mutability": "mutable",
                        "name": "ptr2",
                        "nameLocation": "7329:4:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 3955,
                        "src": "7321:12:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3949,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7321:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7306:28:20"
                  },
                  "returnParameters": {
                    "id": 3952,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "7348:0:20"
                  },
                  "scope": 4619,
                  "src": "7292:234:20",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 3966,
                    "nodeType": "Block",
                    "src": "7713:64:20",
                    "statements": [
                      {
                        "AST": {
                          "nativeSrc": "7732:39:20",
                          "nodeType": "YulBlock",
                          "src": "7732:39:20",
                          "statements": [
                            {
                              "nativeSrc": "7746:15:20",
                              "nodeType": "YulAssignment",
                              "src": "7746:15:20",
                              "value": {
                                "name": "input",
                                "nativeSrc": "7756:5:20",
                                "nodeType": "YulIdentifier",
                                "src": "7756:5:20"
                              },
                              "variableNames": [
                                {
                                  "name": "output",
                                  "nativeSrc": "7746:6:20",
                                  "nodeType": "YulIdentifier",
                                  "src": "7746:6:20"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "paris",
                        "externalReferences": [
                          {
                            "declaration": 3959,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7756:5:20",
                            "valueSize": 1
                          },
                          {
                            "declaration": 3963,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7746:6:20",
                            "valueSize": 1
                          }
                        ],
                        "id": 3965,
                        "nodeType": "InlineAssembly",
                        "src": "7723:48:20"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3956,
                    "nodeType": "StructuredDocumentation",
                    "src": "7532:76:20",
                    "text": "@dev Helper: low level cast address memory array to uint256 memory array"
                  },
                  "id": 3967,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_castToUint256Array",
                  "nameLocation": "7622:19:20",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3960,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3959,
                        "mutability": "mutable",
                        "name": "input",
                        "nameLocation": "7659:5:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 3967,
                        "src": "7642:22:20",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 3957,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "7642:7:20",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 3958,
                          "nodeType": "ArrayTypeName",
                          "src": "7642:9:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                            "typeString": "address[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7641:24:20"
                  },
                  "returnParameters": {
                    "id": 3964,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3963,
                        "mutability": "mutable",
                        "name": "output",
                        "nameLocation": "7705:6:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 3967,
                        "src": "7688:23:20",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 3961,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "7688:7:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 3962,
                          "nodeType": "ArrayTypeName",
                          "src": "7688:9:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                            "typeString": "uint256[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7687:25:20"
                  },
                  "scope": 4619,
                  "src": "7613:164:20",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 3978,
                    "nodeType": "Block",
                    "src": "7964:64:20",
                    "statements": [
                      {
                        "AST": {
                          "nativeSrc": "7983:39:20",
                          "nodeType": "YulBlock",
                          "src": "7983:39:20",
                          "statements": [
                            {
                              "nativeSrc": "7997:15:20",
                              "nodeType": "YulAssignment",
                              "src": "7997:15:20",
                              "value": {
                                "name": "input",
                                "nativeSrc": "8007:5:20",
                                "nodeType": "YulIdentifier",
                                "src": "8007:5:20"
                              },
                              "variableNames": [
                                {
                                  "name": "output",
                                  "nativeSrc": "7997:6:20",
                                  "nodeType": "YulIdentifier",
                                  "src": "7997:6:20"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "paris",
                        "externalReferences": [
                          {
                            "declaration": 3971,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "8007:5:20",
                            "valueSize": 1
                          },
                          {
                            "declaration": 3975,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7997:6:20",
                            "valueSize": 1
                          }
                        ],
                        "id": 3977,
                        "nodeType": "InlineAssembly",
                        "src": "7974:48:20"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3968,
                    "nodeType": "StructuredDocumentation",
                    "src": "7783:76:20",
                    "text": "@dev Helper: low level cast bytes32 memory array to uint256 memory array"
                  },
                  "id": 3979,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_castToUint256Array",
                  "nameLocation": "7873:19:20",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3972,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3971,
                        "mutability": "mutable",
                        "name": "input",
                        "nameLocation": "7910:5:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 3979,
                        "src": "7893:22:20",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 3969,
                            "name": "bytes32",
                            "nodeType": "ElementaryTypeName",
                            "src": "7893:7:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "id": 3970,
                          "nodeType": "ArrayTypeName",
                          "src": "7893:9:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                            "typeString": "bytes32[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7892:24:20"
                  },
                  "returnParameters": {
                    "id": 3976,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3975,
                        "mutability": "mutable",
                        "name": "output",
                        "nameLocation": "7956:6:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 3979,
                        "src": "7939:23:20",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 3973,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "7939:7:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 3974,
                          "nodeType": "ArrayTypeName",
                          "src": "7939:9:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                            "typeString": "uint256[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7938:25:20"
                  },
                  "scope": 4619,
                  "src": "7864:164:20",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 4004,
                    "nodeType": "Block",
                    "src": "8290:64:20",
                    "statements": [
                      {
                        "AST": {
                          "nativeSrc": "8309:39:20",
                          "nodeType": "YulBlock",
                          "src": "8309:39:20",
                          "statements": [
                            {
                              "nativeSrc": "8323:15:20",
                              "nodeType": "YulAssignment",
                              "src": "8323:15:20",
                              "value": {
                                "name": "input",
                                "nativeSrc": "8333:5:20",
                                "nodeType": "YulIdentifier",
                                "src": "8333:5:20"
                              },
                              "variableNames": [
                                {
                                  "name": "output",
                                  "nativeSrc": "8323:6:20",
                                  "nodeType": "YulIdentifier",
                                  "src": "8323:6:20"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "paris",
                        "externalReferences": [
                          {
                            "declaration": 3990,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "8333:5:20",
                            "valueSize": 1
                          },
                          {
                            "declaration": 4001,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "8323:6:20",
                            "valueSize": 1
                          }
                        ],
                        "id": 4003,
                        "nodeType": "InlineAssembly",
                        "src": "8300:48:20"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 3980,
                    "nodeType": "StructuredDocumentation",
                    "src": "8034:78:20",
                    "text": "@dev Helper: low level cast address comp function to uint256 comp function"
                  },
                  "id": 4005,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_castToUint256Comp",
                  "nameLocation": "8126:18:20",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 3991,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3990,
                        "mutability": "mutable",
                        "name": "input",
                        "nameLocation": "8201:5:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4005,
                        "src": "8154:52:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$returns$_t_bool_$",
                          "typeString": "function (address,address) pure returns (bool)"
                        },
                        "typeName": {
                          "id": 3989,
                          "nodeType": "FunctionTypeName",
                          "parameterTypes": {
                            "id": 3985,
                            "nodeType": "ParameterList",
                            "parameters": [
                              {
                                "constant": false,
                                "id": 3982,
                                "mutability": "mutable",
                                "name": "",
                                "nameLocation": "-1:-1:-1",
                                "nodeType": "VariableDeclaration",
                                "scope": 3989,
                                "src": "8163:7:20",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                "typeName": {
                                  "id": 3981,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "8163:7:20",
                                  "stateMutability": "nonpayable",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "visibility": "internal"
                              },
                              {
                                "constant": false,
                                "id": 3984,
                                "mutability": "mutable",
                                "name": "",
                                "nameLocation": "-1:-1:-1",
                                "nodeType": "VariableDeclaration",
                                "scope": 3989,
                                "src": "8172:7:20",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                "typeName": {
                                  "id": 3983,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "8172:7:20",
                                  "stateMutability": "nonpayable",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "src": "8162:18:20"
                          },
                          "returnParameterTypes": {
                            "id": 3988,
                            "nodeType": "ParameterList",
                            "parameters": [
                              {
                                "constant": false,
                                "id": 3987,
                                "mutability": "mutable",
                                "name": "",
                                "nameLocation": "-1:-1:-1",
                                "nodeType": "VariableDeclaration",
                                "scope": 3989,
                                "src": "8195:4:20",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "typeName": {
                                  "id": 3986,
                                  "name": "bool",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "8195:4:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "src": "8194:6:20"
                          },
                          "src": "8154:52:20",
                          "stateMutability": "pure",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$returns$_t_bool_$",
                            "typeString": "function (address,address) pure returns (bool)"
                          },
                          "visibility": "internal"
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8144:68:20"
                  },
                  "returnParameters": {
                    "id": 4002,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4001,
                        "mutability": "mutable",
                        "name": "output",
                        "nameLocation": "8282:6:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4005,
                        "src": "8235:53:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$",
                          "typeString": "function (uint256,uint256) pure returns (bool)"
                        },
                        "typeName": {
                          "id": 4000,
                          "nodeType": "FunctionTypeName",
                          "parameterTypes": {
                            "id": 3996,
                            "nodeType": "ParameterList",
                            "parameters": [
                              {
                                "constant": false,
                                "id": 3993,
                                "mutability": "mutable",
                                "name": "",
                                "nameLocation": "-1:-1:-1",
                                "nodeType": "VariableDeclaration",
                                "scope": 4000,
                                "src": "8244:7:20",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 3992,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "8244:7:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              },
                              {
                                "constant": false,
                                "id": 3995,
                                "mutability": "mutable",
                                "name": "",
                                "nameLocation": "-1:-1:-1",
                                "nodeType": "VariableDeclaration",
                                "scope": 4000,
                                "src": "8253:7:20",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 3994,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "8253:7:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "src": "8243:18:20"
                          },
                          "returnParameterTypes": {
                            "id": 3999,
                            "nodeType": "ParameterList",
                            "parameters": [
                              {
                                "constant": false,
                                "id": 3998,
                                "mutability": "mutable",
                                "name": "",
                                "nameLocation": "-1:-1:-1",
                                "nodeType": "VariableDeclaration",
                                "scope": 4000,
                                "src": "8276:4:20",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "typeName": {
                                  "id": 3997,
                                  "name": "bool",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "8276:4:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "src": "8275:6:20"
                          },
                          "src": "8235:53:20",
                          "stateMutability": "pure",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (uint256,uint256) pure returns (bool)"
                          },
                          "visibility": "internal"
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8234:55:20"
                  },
                  "scope": 4619,
                  "src": "8117:237:20",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 4030,
                    "nodeType": "Block",
                    "src": "8616:64:20",
                    "statements": [
                      {
                        "AST": {
                          "nativeSrc": "8635:39:20",
                          "nodeType": "YulBlock",
                          "src": "8635:39:20",
                          "statements": [
                            {
                              "nativeSrc": "8649:15:20",
                              "nodeType": "YulAssignment",
                              "src": "8649:15:20",
                              "value": {
                                "name": "input",
                                "nativeSrc": "8659:5:20",
                                "nodeType": "YulIdentifier",
                                "src": "8659:5:20"
                              },
                              "variableNames": [
                                {
                                  "name": "output",
                                  "nativeSrc": "8649:6:20",
                                  "nodeType": "YulIdentifier",
                                  "src": "8649:6:20"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "paris",
                        "externalReferences": [
                          {
                            "declaration": 4016,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "8659:5:20",
                            "valueSize": 1
                          },
                          {
                            "declaration": 4027,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "8649:6:20",
                            "valueSize": 1
                          }
                        ],
                        "id": 4029,
                        "nodeType": "InlineAssembly",
                        "src": "8626:48:20"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4006,
                    "nodeType": "StructuredDocumentation",
                    "src": "8360:78:20",
                    "text": "@dev Helper: low level cast bytes32 comp function to uint256 comp function"
                  },
                  "id": 4031,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_castToUint256Comp",
                  "nameLocation": "8452:18:20",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4017,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4016,
                        "mutability": "mutable",
                        "name": "input",
                        "nameLocation": "8527:5:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4031,
                        "src": "8480:52:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes32_$returns$_t_bool_$",
                          "typeString": "function (bytes32,bytes32) pure returns (bool)"
                        },
                        "typeName": {
                          "id": 4015,
                          "nodeType": "FunctionTypeName",
                          "parameterTypes": {
                            "id": 4011,
                            "nodeType": "ParameterList",
                            "parameters": [
                              {
                                "constant": false,
                                "id": 4008,
                                "mutability": "mutable",
                                "name": "",
                                "nameLocation": "-1:-1:-1",
                                "nodeType": "VariableDeclaration",
                                "scope": 4015,
                                "src": "8489:7:20",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                "typeName": {
                                  "id": 4007,
                                  "name": "bytes32",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "8489:7:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "visibility": "internal"
                              },
                              {
                                "constant": false,
                                "id": 4010,
                                "mutability": "mutable",
                                "name": "",
                                "nameLocation": "-1:-1:-1",
                                "nodeType": "VariableDeclaration",
                                "scope": 4015,
                                "src": "8498:7:20",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                "typeName": {
                                  "id": 4009,
                                  "name": "bytes32",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "8498:7:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "src": "8488:18:20"
                          },
                          "returnParameterTypes": {
                            "id": 4014,
                            "nodeType": "ParameterList",
                            "parameters": [
                              {
                                "constant": false,
                                "id": 4013,
                                "mutability": "mutable",
                                "name": "",
                                "nameLocation": "-1:-1:-1",
                                "nodeType": "VariableDeclaration",
                                "scope": 4015,
                                "src": "8521:4:20",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "typeName": {
                                  "id": 4012,
                                  "name": "bool",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "8521:4:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "src": "8520:6:20"
                          },
                          "src": "8480:52:20",
                          "stateMutability": "pure",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes32_$returns$_t_bool_$",
                            "typeString": "function (bytes32,bytes32) pure returns (bool)"
                          },
                          "visibility": "internal"
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8470:68:20"
                  },
                  "returnParameters": {
                    "id": 4028,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4027,
                        "mutability": "mutable",
                        "name": "output",
                        "nameLocation": "8608:6:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4031,
                        "src": "8561:53:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$",
                          "typeString": "function (uint256,uint256) pure returns (bool)"
                        },
                        "typeName": {
                          "id": 4026,
                          "nodeType": "FunctionTypeName",
                          "parameterTypes": {
                            "id": 4022,
                            "nodeType": "ParameterList",
                            "parameters": [
                              {
                                "constant": false,
                                "id": 4019,
                                "mutability": "mutable",
                                "name": "",
                                "nameLocation": "-1:-1:-1",
                                "nodeType": "VariableDeclaration",
                                "scope": 4026,
                                "src": "8570:7:20",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 4018,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "8570:7:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              },
                              {
                                "constant": false,
                                "id": 4021,
                                "mutability": "mutable",
                                "name": "",
                                "nameLocation": "-1:-1:-1",
                                "nodeType": "VariableDeclaration",
                                "scope": 4026,
                                "src": "8579:7:20",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 4020,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "8579:7:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "src": "8569:18:20"
                          },
                          "returnParameterTypes": {
                            "id": 4025,
                            "nodeType": "ParameterList",
                            "parameters": [
                              {
                                "constant": false,
                                "id": 4024,
                                "mutability": "mutable",
                                "name": "",
                                "nameLocation": "-1:-1:-1",
                                "nodeType": "VariableDeclaration",
                                "scope": 4026,
                                "src": "8602:4:20",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "typeName": {
                                  "id": 4023,
                                  "name": "bool",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "8602:4:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "src": "8601:6:20"
                          },
                          "src": "8561:53:20",
                          "stateMutability": "pure",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (uint256,uint256) pure returns (bool)"
                          },
                          "visibility": "internal"
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8560:55:20"
                  },
                  "scope": 4619,
                  "src": "8443:237:20",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 4113,
                    "nodeType": "Block",
                    "src": "9405:834:20",
                    "statements": [
                      {
                        "assignments": [
                          4043
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4043,
                            "mutability": "mutable",
                            "name": "low",
                            "nameLocation": "9423:3:20",
                            "nodeType": "VariableDeclaration",
                            "scope": 4113,
                            "src": "9415:11:20",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 4042,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "9415:7:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4045,
                        "initialValue": {
                          "hexValue": "30",
                          "id": 4044,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "9429:1:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "9415:15:20"
                      },
                      {
                        "assignments": [
                          4047
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4047,
                            "mutability": "mutable",
                            "name": "high",
                            "nameLocation": "9448:4:20",
                            "nodeType": "VariableDeclaration",
                            "scope": 4113,
                            "src": "9440:12:20",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 4046,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "9440:7:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4050,
                        "initialValue": {
                          "expression": {
                            "id": 4048,
                            "name": "array",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4035,
                            "src": "9455:5:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                              "typeString": "uint256[] storage pointer"
                            }
                          },
                          "id": 4049,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "9461:6:20",
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "9455:12:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "9440:27:20"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4053,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 4051,
                            "name": "high",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4047,
                            "src": "9482:4:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 4052,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "9490:1:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "9482:9:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4057,
                        "nodeType": "IfStatement",
                        "src": "9478:48:20",
                        "trueBody": {
                          "id": 4056,
                          "nodeType": "Block",
                          "src": "9493:33:20",
                          "statements": [
                            {
                              "expression": {
                                "hexValue": "30",
                                "id": 4054,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "9514:1:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "functionReturnParameters": 4041,
                              "id": 4055,
                              "nodeType": "Return",
                              "src": "9507:8:20"
                            }
                          ]
                        }
                      },
                      {
                        "body": {
                          "id": 4089,
                          "nodeType": "Block",
                          "src": "9555:423:20",
                          "statements": [
                            {
                              "assignments": [
                                4062
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 4062,
                                  "mutability": "mutable",
                                  "name": "mid",
                                  "nameLocation": "9577:3:20",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 4089,
                                  "src": "9569:11:20",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 4061,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "9569:7:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 4068,
                              "initialValue": {
                                "arguments": [
                                  {
                                    "id": 4065,
                                    "name": "low",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4043,
                                    "src": "9596:3:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "id": 4066,
                                    "name": "high",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4047,
                                    "src": "9601:4:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "id": 4063,
                                    "name": "Math",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8014,
                                    "src": "9583:4:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_Math_$8014_$",
                                      "typeString": "type(library Math)"
                                    }
                                  },
                                  "id": 4064,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "9588:7:20",
                                  "memberName": "average",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 6743,
                                  "src": "9583:12:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 4067,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "9583:23:20",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "9569:37:20"
                            },
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 4075,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "expression": {
                                    "arguments": [
                                      {
                                        "id": 4070,
                                        "name": "array",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4035,
                                        "src": "9844:5:20",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                                          "typeString": "uint256[] storage pointer"
                                        }
                                      },
                                      {
                                        "id": 4071,
                                        "name": "mid",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4062,
                                        "src": "9851:3:20",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                                          "typeString": "uint256[] storage pointer"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "id": 4069,
                                      "name": "unsafeAccess",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [
                                        4394,
                                        4420,
                                        4446,
                                        4472,
                                        4498
                                      ],
                                      "referencedDeclaration": 4446,
                                      "src": "9831:12:20",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint256_$dyn_storage_ptr_$_t_uint256_$returns$_t_struct$_Uint256Slot_$4870_storage_ptr_$",
                                        "typeString": "function (uint256[] storage pointer,uint256) pure returns (struct StorageSlot.Uint256Slot storage pointer)"
                                      }
                                    },
                                    "id": 4072,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "9831:24:20",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Uint256Slot_$4870_storage_ptr",
                                      "typeString": "struct StorageSlot.Uint256Slot storage pointer"
                                    }
                                  },
                                  "id": 4073,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "9856:5:20",
                                  "memberName": "value",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 4869,
                                  "src": "9831:30:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">",
                                "rightExpression": {
                                  "id": 4074,
                                  "name": "element",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4037,
                                  "src": "9864:7:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "9831:40:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": {
                                "id": 4087,
                                "nodeType": "Block",
                                "src": "9922:46:20",
                                "statements": [
                                  {
                                    "expression": {
                                      "id": 4085,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "id": 4081,
                                        "name": "low",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4043,
                                        "src": "9940:3:20",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 4084,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 4082,
                                          "name": "mid",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 4062,
                                          "src": "9946:3:20",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "+",
                                        "rightExpression": {
                                          "hexValue": "31",
                                          "id": 4083,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "9952:1:20",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_1_by_1",
                                            "typeString": "int_const 1"
                                          },
                                          "value": "1"
                                        },
                                        "src": "9946:7:20",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "9940:13:20",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 4086,
                                    "nodeType": "ExpressionStatement",
                                    "src": "9940:13:20"
                                  }
                                ]
                              },
                              "id": 4088,
                              "nodeType": "IfStatement",
                              "src": "9827:141:20",
                              "trueBody": {
                                "id": 4080,
                                "nodeType": "Block",
                                "src": "9873:43:20",
                                "statements": [
                                  {
                                    "expression": {
                                      "id": 4078,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "id": 4076,
                                        "name": "high",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4047,
                                        "src": "9891:4:20",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "id": 4077,
                                        "name": "mid",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4062,
                                        "src": "9898:3:20",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "9891:10:20",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 4079,
                                    "nodeType": "ExpressionStatement",
                                    "src": "9891:10:20"
                                  }
                                ]
                              }
                            }
                          ]
                        },
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4060,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 4058,
                            "name": "low",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4043,
                            "src": "9543:3:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "id": 4059,
                            "name": "high",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4047,
                            "src": "9549:4:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "9543:10:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4090,
                        "nodeType": "WhileStatement",
                        "src": "9536:442:20"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 4103,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 4093,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 4091,
                              "name": "low",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4043,
                              "src": "10095:3:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">",
                            "rightExpression": {
                              "hexValue": "30",
                              "id": 4092,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "10101:1:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "src": "10095:7:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 4102,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 4095,
                                    "name": "array",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4035,
                                    "src": "10119:5:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                                      "typeString": "uint256[] storage pointer"
                                    }
                                  },
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 4098,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 4096,
                                      "name": "low",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4043,
                                      "src": "10126:3:20",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "-",
                                    "rightExpression": {
                                      "hexValue": "31",
                                      "id": 4097,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "10132:1:20",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "src": "10126:7:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                                      "typeString": "uint256[] storage pointer"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 4094,
                                  "name": "unsafeAccess",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    4394,
                                    4420,
                                    4446,
                                    4472,
                                    4498
                                  ],
                                  "referencedDeclaration": 4446,
                                  "src": "10106:12:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint256_$dyn_storage_ptr_$_t_uint256_$returns$_t_struct$_Uint256Slot_$4870_storage_ptr_$",
                                    "typeString": "function (uint256[] storage pointer,uint256) pure returns (struct StorageSlot.Uint256Slot storage pointer)"
                                  }
                                },
                                "id": 4099,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "10106:28:20",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Uint256Slot_$4870_storage_ptr",
                                  "typeString": "struct StorageSlot.Uint256Slot storage pointer"
                                }
                              },
                              "id": 4100,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "10135:5:20",
                              "memberName": "value",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 4869,
                              "src": "10106:34:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "id": 4101,
                              "name": "element",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4037,
                              "src": "10144:7:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "10106:45:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "10095:56:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 4111,
                          "nodeType": "Block",
                          "src": "10198:35:20",
                          "statements": [
                            {
                              "expression": {
                                "id": 4109,
                                "name": "low",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4043,
                                "src": "10219:3:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "functionReturnParameters": 4041,
                              "id": 4110,
                              "nodeType": "Return",
                              "src": "10212:10:20"
                            }
                          ]
                        },
                        "id": 4112,
                        "nodeType": "IfStatement",
                        "src": "10091:142:20",
                        "trueBody": {
                          "id": 4108,
                          "nodeType": "Block",
                          "src": "10153:39:20",
                          "statements": [
                            {
                              "expression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 4106,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 4104,
                                  "name": "low",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4043,
                                  "src": "10174:3:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "hexValue": "31",
                                  "id": 4105,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "10180:1:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "10174:7:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "functionReturnParameters": 4041,
                              "id": 4107,
                              "nodeType": "Return",
                              "src": "10167:14:20"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4032,
                    "nodeType": "StructuredDocumentation",
                    "src": "8686:616:20",
                    "text": " @dev Searches a sorted `array` and returns the first index that contains\n a value greater or equal to `element`. If no such index exists (i.e. all\n values in the array are strictly less than `element`), the array length is\n returned. Time complexity O(log n).\n NOTE: The `array` is expected to be sorted in ascending order, and to\n contain no repeated elements.\n IMPORTANT: Deprecated. This implementation behaves as {lowerBound} but lacks\n support for repeated elements in the array. The {lowerBound} function should\n be used instead."
                  },
                  "id": 4114,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "findUpperBound",
                  "nameLocation": "9316:14:20",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4038,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4035,
                        "mutability": "mutable",
                        "name": "array",
                        "nameLocation": "9349:5:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4114,
                        "src": "9331:23:20",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                          "typeString": "uint256[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 4033,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "9331:7:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 4034,
                          "nodeType": "ArrayTypeName",
                          "src": "9331:9:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                            "typeString": "uint256[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4037,
                        "mutability": "mutable",
                        "name": "element",
                        "nameLocation": "9364:7:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4114,
                        "src": "9356:15:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4036,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9356:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "9330:42:20"
                  },
                  "returnParameters": {
                    "id": 4041,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4040,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 4114,
                        "src": "9396:7:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4039,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9396:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "9395:9:20"
                  },
                  "scope": 4619,
                  "src": "9307:932:20",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4177,
                    "nodeType": "Block",
                    "src": "10756:709:20",
                    "statements": [
                      {
                        "assignments": [
                          4126
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4126,
                            "mutability": "mutable",
                            "name": "low",
                            "nameLocation": "10774:3:20",
                            "nodeType": "VariableDeclaration",
                            "scope": 4177,
                            "src": "10766:11:20",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 4125,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "10766:7:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4128,
                        "initialValue": {
                          "hexValue": "30",
                          "id": 4127,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "10780:1:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "10766:15:20"
                      },
                      {
                        "assignments": [
                          4130
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4130,
                            "mutability": "mutable",
                            "name": "high",
                            "nameLocation": "10799:4:20",
                            "nodeType": "VariableDeclaration",
                            "scope": 4177,
                            "src": "10791:12:20",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 4129,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "10791:7:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4133,
                        "initialValue": {
                          "expression": {
                            "id": 4131,
                            "name": "array",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4118,
                            "src": "10806:5:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                              "typeString": "uint256[] storage pointer"
                            }
                          },
                          "id": 4132,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "10812:6:20",
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "10806:12:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "10791:27:20"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4136,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 4134,
                            "name": "high",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4130,
                            "src": "10833:4:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 4135,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "10841:1:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "10833:9:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4140,
                        "nodeType": "IfStatement",
                        "src": "10829:48:20",
                        "trueBody": {
                          "id": 4139,
                          "nodeType": "Block",
                          "src": "10844:33:20",
                          "statements": [
                            {
                              "expression": {
                                "hexValue": "30",
                                "id": 4137,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "10865:1:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "functionReturnParameters": 4124,
                              "id": 4138,
                              "nodeType": "Return",
                              "src": "10858:8:20"
                            }
                          ]
                        }
                      },
                      {
                        "body": {
                          "id": 4173,
                          "nodeType": "Block",
                          "src": "10906:532:20",
                          "statements": [
                            {
                              "assignments": [
                                4145
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 4145,
                                  "mutability": "mutable",
                                  "name": "mid",
                                  "nameLocation": "10928:3:20",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 4173,
                                  "src": "10920:11:20",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 4144,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "10920:7:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 4151,
                              "initialValue": {
                                "arguments": [
                                  {
                                    "id": 4148,
                                    "name": "low",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4126,
                                    "src": "10947:3:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "id": 4149,
                                    "name": "high",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4130,
                                    "src": "10952:4:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "id": 4146,
                                    "name": "Math",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8014,
                                    "src": "10934:4:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_Math_$8014_$",
                                      "typeString": "type(library Math)"
                                    }
                                  },
                                  "id": 4147,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "10939:7:20",
                                  "memberName": "average",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 6743,
                                  "src": "10934:12:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 4150,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "10934:23:20",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "10920:37:20"
                            },
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 4158,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "expression": {
                                    "arguments": [
                                      {
                                        "id": 4153,
                                        "name": "array",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4118,
                                        "src": "11195:5:20",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                                          "typeString": "uint256[] storage pointer"
                                        }
                                      },
                                      {
                                        "id": 4154,
                                        "name": "mid",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4145,
                                        "src": "11202:3:20",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                                          "typeString": "uint256[] storage pointer"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "id": 4152,
                                      "name": "unsafeAccess",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [
                                        4394,
                                        4420,
                                        4446,
                                        4472,
                                        4498
                                      ],
                                      "referencedDeclaration": 4446,
                                      "src": "11182:12:20",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint256_$dyn_storage_ptr_$_t_uint256_$returns$_t_struct$_Uint256Slot_$4870_storage_ptr_$",
                                        "typeString": "function (uint256[] storage pointer,uint256) pure returns (struct StorageSlot.Uint256Slot storage pointer)"
                                      }
                                    },
                                    "id": 4155,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "11182:24:20",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Uint256Slot_$4870_storage_ptr",
                                      "typeString": "struct StorageSlot.Uint256Slot storage pointer"
                                    }
                                  },
                                  "id": 4156,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "11207:5:20",
                                  "memberName": "value",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 4869,
                                  "src": "11182:30:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<",
                                "rightExpression": {
                                  "id": 4157,
                                  "name": "element",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4120,
                                  "src": "11215:7:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "11182:40:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": {
                                "id": 4171,
                                "nodeType": "Block",
                                "src": "11385:43:20",
                                "statements": [
                                  {
                                    "expression": {
                                      "id": 4169,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "id": 4167,
                                        "name": "high",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4130,
                                        "src": "11403:4:20",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "id": 4168,
                                        "name": "mid",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4145,
                                        "src": "11410:3:20",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "11403:10:20",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 4170,
                                    "nodeType": "ExpressionStatement",
                                    "src": "11403:10:20"
                                  }
                                ]
                              },
                              "id": 4172,
                              "nodeType": "IfStatement",
                              "src": "11178:250:20",
                              "trueBody": {
                                "id": 4166,
                                "nodeType": "Block",
                                "src": "11224:155:20",
                                "statements": [
                                  {
                                    "id": 4165,
                                    "nodeType": "UncheckedBlock",
                                    "src": "11301:64:20",
                                    "statements": [
                                      {
                                        "expression": {
                                          "id": 4163,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftHandSide": {
                                            "id": 4159,
                                            "name": "low",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4126,
                                            "src": "11333:3:20",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "Assignment",
                                          "operator": "=",
                                          "rightHandSide": {
                                            "commonType": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            },
                                            "id": 4162,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                              "id": 4160,
                                              "name": "mid",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 4145,
                                              "src": "11339:3:20",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "+",
                                            "rightExpression": {
                                              "hexValue": "31",
                                              "id": 4161,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "number",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "11345:1:20",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_rational_1_by_1",
                                                "typeString": "int_const 1"
                                              },
                                              "value": "1"
                                            },
                                            "src": "11339:7:20",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "src": "11333:13:20",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "id": 4164,
                                        "nodeType": "ExpressionStatement",
                                        "src": "11333:13:20"
                                      }
                                    ]
                                  }
                                ]
                              }
                            }
                          ]
                        },
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4143,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 4141,
                            "name": "low",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4126,
                            "src": "10894:3:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "id": 4142,
                            "name": "high",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4130,
                            "src": "10900:4:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "10894:10:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4174,
                        "nodeType": "WhileStatement",
                        "src": "10887:551:20"
                      },
                      {
                        "expression": {
                          "id": 4175,
                          "name": "low",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4126,
                          "src": "11455:3:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 4124,
                        "id": 4176,
                        "nodeType": "Return",
                        "src": "11448:10:20"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4115,
                    "nodeType": "StructuredDocumentation",
                    "src": "10245:412:20",
                    "text": " @dev Searches an `array` sorted in ascending order and returns the first\n index that contains a value greater or equal than `element`. If no such index\n exists (i.e. all values in the array are strictly less than `element`), the array\n length is returned. Time complexity O(log n).\n See C++'s https://en.cppreference.com/w/cpp/algorithm/lower_bound[lower_bound]."
                  },
                  "id": 4178,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "lowerBound",
                  "nameLocation": "10671:10:20",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4121,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4118,
                        "mutability": "mutable",
                        "name": "array",
                        "nameLocation": "10700:5:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4178,
                        "src": "10682:23:20",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                          "typeString": "uint256[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 4116,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "10682:7:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 4117,
                          "nodeType": "ArrayTypeName",
                          "src": "10682:9:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                            "typeString": "uint256[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4120,
                        "mutability": "mutable",
                        "name": "element",
                        "nameLocation": "10715:7:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4178,
                        "src": "10707:15:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4119,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "10707:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "10681:42:20"
                  },
                  "returnParameters": {
                    "id": 4124,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4123,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 4178,
                        "src": "10747:7:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4122,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "10747:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "10746:9:20"
                  },
                  "scope": 4619,
                  "src": "10662:803:20",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4241,
                    "nodeType": "Block",
                    "src": "11982:709:20",
                    "statements": [
                      {
                        "assignments": [
                          4190
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4190,
                            "mutability": "mutable",
                            "name": "low",
                            "nameLocation": "12000:3:20",
                            "nodeType": "VariableDeclaration",
                            "scope": 4241,
                            "src": "11992:11:20",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 4189,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "11992:7:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4192,
                        "initialValue": {
                          "hexValue": "30",
                          "id": 4191,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "12006:1:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "11992:15:20"
                      },
                      {
                        "assignments": [
                          4194
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4194,
                            "mutability": "mutable",
                            "name": "high",
                            "nameLocation": "12025:4:20",
                            "nodeType": "VariableDeclaration",
                            "scope": 4241,
                            "src": "12017:12:20",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 4193,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "12017:7:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4197,
                        "initialValue": {
                          "expression": {
                            "id": 4195,
                            "name": "array",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4182,
                            "src": "12032:5:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                              "typeString": "uint256[] storage pointer"
                            }
                          },
                          "id": 4196,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "12038:6:20",
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "12032:12:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "12017:27:20"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4200,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 4198,
                            "name": "high",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4194,
                            "src": "12059:4:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 4199,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "12067:1:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "12059:9:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4204,
                        "nodeType": "IfStatement",
                        "src": "12055:48:20",
                        "trueBody": {
                          "id": 4203,
                          "nodeType": "Block",
                          "src": "12070:33:20",
                          "statements": [
                            {
                              "expression": {
                                "hexValue": "30",
                                "id": 4201,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "12091:1:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "functionReturnParameters": 4188,
                              "id": 4202,
                              "nodeType": "Return",
                              "src": "12084:8:20"
                            }
                          ]
                        }
                      },
                      {
                        "body": {
                          "id": 4237,
                          "nodeType": "Block",
                          "src": "12132:532:20",
                          "statements": [
                            {
                              "assignments": [
                                4209
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 4209,
                                  "mutability": "mutable",
                                  "name": "mid",
                                  "nameLocation": "12154:3:20",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 4237,
                                  "src": "12146:11:20",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 4208,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "12146:7:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 4215,
                              "initialValue": {
                                "arguments": [
                                  {
                                    "id": 4212,
                                    "name": "low",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4190,
                                    "src": "12173:3:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "id": 4213,
                                    "name": "high",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4194,
                                    "src": "12178:4:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "id": 4210,
                                    "name": "Math",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8014,
                                    "src": "12160:4:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_Math_$8014_$",
                                      "typeString": "type(library Math)"
                                    }
                                  },
                                  "id": 4211,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "12165:7:20",
                                  "memberName": "average",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 6743,
                                  "src": "12160:12:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 4214,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "12160:23:20",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "12146:37:20"
                            },
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 4222,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "expression": {
                                    "arguments": [
                                      {
                                        "id": 4217,
                                        "name": "array",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4182,
                                        "src": "12421:5:20",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                                          "typeString": "uint256[] storage pointer"
                                        }
                                      },
                                      {
                                        "id": 4218,
                                        "name": "mid",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4209,
                                        "src": "12428:3:20",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                                          "typeString": "uint256[] storage pointer"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "id": 4216,
                                      "name": "unsafeAccess",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [
                                        4394,
                                        4420,
                                        4446,
                                        4472,
                                        4498
                                      ],
                                      "referencedDeclaration": 4446,
                                      "src": "12408:12:20",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint256_$dyn_storage_ptr_$_t_uint256_$returns$_t_struct$_Uint256Slot_$4870_storage_ptr_$",
                                        "typeString": "function (uint256[] storage pointer,uint256) pure returns (struct StorageSlot.Uint256Slot storage pointer)"
                                      }
                                    },
                                    "id": 4219,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "12408:24:20",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Uint256Slot_$4870_storage_ptr",
                                      "typeString": "struct StorageSlot.Uint256Slot storage pointer"
                                    }
                                  },
                                  "id": 4220,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "12433:5:20",
                                  "memberName": "value",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 4869,
                                  "src": "12408:30:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">",
                                "rightExpression": {
                                  "id": 4221,
                                  "name": "element",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4184,
                                  "src": "12441:7:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "12408:40:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": {
                                "id": 4235,
                                "nodeType": "Block",
                                "src": "12499:155:20",
                                "statements": [
                                  {
                                    "id": 4234,
                                    "nodeType": "UncheckedBlock",
                                    "src": "12576:64:20",
                                    "statements": [
                                      {
                                        "expression": {
                                          "id": 4232,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftHandSide": {
                                            "id": 4228,
                                            "name": "low",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4190,
                                            "src": "12608:3:20",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "Assignment",
                                          "operator": "=",
                                          "rightHandSide": {
                                            "commonType": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            },
                                            "id": 4231,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                              "id": 4229,
                                              "name": "mid",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 4209,
                                              "src": "12614:3:20",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "+",
                                            "rightExpression": {
                                              "hexValue": "31",
                                              "id": 4230,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "number",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "12620:1:20",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_rational_1_by_1",
                                                "typeString": "int_const 1"
                                              },
                                              "value": "1"
                                            },
                                            "src": "12614:7:20",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "src": "12608:13:20",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "id": 4233,
                                        "nodeType": "ExpressionStatement",
                                        "src": "12608:13:20"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "id": 4236,
                              "nodeType": "IfStatement",
                              "src": "12404:250:20",
                              "trueBody": {
                                "id": 4227,
                                "nodeType": "Block",
                                "src": "12450:43:20",
                                "statements": [
                                  {
                                    "expression": {
                                      "id": 4225,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "id": 4223,
                                        "name": "high",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4194,
                                        "src": "12468:4:20",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "id": 4224,
                                        "name": "mid",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4209,
                                        "src": "12475:3:20",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "12468:10:20",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 4226,
                                    "nodeType": "ExpressionStatement",
                                    "src": "12468:10:20"
                                  }
                                ]
                              }
                            }
                          ]
                        },
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4207,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 4205,
                            "name": "low",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4190,
                            "src": "12120:3:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "id": 4206,
                            "name": "high",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4194,
                            "src": "12126:4:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "12120:10:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4238,
                        "nodeType": "WhileStatement",
                        "src": "12113:551:20"
                      },
                      {
                        "expression": {
                          "id": 4239,
                          "name": "low",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4190,
                          "src": "12681:3:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 4188,
                        "id": 4240,
                        "nodeType": "Return",
                        "src": "12674:10:20"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4179,
                    "nodeType": "StructuredDocumentation",
                    "src": "11471:412:20",
                    "text": " @dev Searches an `array` sorted in ascending order and returns the first\n index that contains a value strictly greater than `element`. If no such index\n exists (i.e. all values in the array are strictly less than `element`), the array\n length is returned. Time complexity O(log n).\n See C++'s https://en.cppreference.com/w/cpp/algorithm/upper_bound[upper_bound]."
                  },
                  "id": 4242,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "upperBound",
                  "nameLocation": "11897:10:20",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4185,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4182,
                        "mutability": "mutable",
                        "name": "array",
                        "nameLocation": "11926:5:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4242,
                        "src": "11908:23:20",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                          "typeString": "uint256[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 4180,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "11908:7:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 4181,
                          "nodeType": "ArrayTypeName",
                          "src": "11908:9:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                            "typeString": "uint256[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4184,
                        "mutability": "mutable",
                        "name": "element",
                        "nameLocation": "11941:7:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4242,
                        "src": "11933:15:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4183,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11933:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "11907:42:20"
                  },
                  "returnParameters": {
                    "id": 4188,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4187,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 4242,
                        "src": "11973:7:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4186,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11973:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "11972:9:20"
                  },
                  "scope": 4619,
                  "src": "11888:803:20",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4304,
                    "nodeType": "Block",
                    "src": "12875:709:20",
                    "statements": [
                      {
                        "assignments": [
                          4254
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4254,
                            "mutability": "mutable",
                            "name": "low",
                            "nameLocation": "12893:3:20",
                            "nodeType": "VariableDeclaration",
                            "scope": 4304,
                            "src": "12885:11:20",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 4253,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "12885:7:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4256,
                        "initialValue": {
                          "hexValue": "30",
                          "id": 4255,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "12899:1:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "12885:15:20"
                      },
                      {
                        "assignments": [
                          4258
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4258,
                            "mutability": "mutable",
                            "name": "high",
                            "nameLocation": "12918:4:20",
                            "nodeType": "VariableDeclaration",
                            "scope": 4304,
                            "src": "12910:12:20",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 4257,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "12910:7:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4261,
                        "initialValue": {
                          "expression": {
                            "id": 4259,
                            "name": "array",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4246,
                            "src": "12925:5:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                              "typeString": "uint256[] memory"
                            }
                          },
                          "id": 4260,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "12931:6:20",
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "12925:12:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "12910:27:20"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4264,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 4262,
                            "name": "high",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4258,
                            "src": "12952:4:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 4263,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "12960:1:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "12952:9:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4268,
                        "nodeType": "IfStatement",
                        "src": "12948:48:20",
                        "trueBody": {
                          "id": 4267,
                          "nodeType": "Block",
                          "src": "12963:33:20",
                          "statements": [
                            {
                              "expression": {
                                "hexValue": "30",
                                "id": 4265,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "12984:1:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "functionReturnParameters": 4252,
                              "id": 4266,
                              "nodeType": "Return",
                              "src": "12977:8:20"
                            }
                          ]
                        }
                      },
                      {
                        "body": {
                          "id": 4300,
                          "nodeType": "Block",
                          "src": "13025:532:20",
                          "statements": [
                            {
                              "assignments": [
                                4273
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 4273,
                                  "mutability": "mutable",
                                  "name": "mid",
                                  "nameLocation": "13047:3:20",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 4300,
                                  "src": "13039:11:20",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 4272,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "13039:7:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 4279,
                              "initialValue": {
                                "arguments": [
                                  {
                                    "id": 4276,
                                    "name": "low",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4254,
                                    "src": "13066:3:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "id": 4277,
                                    "name": "high",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4258,
                                    "src": "13071:4:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "id": 4274,
                                    "name": "Math",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8014,
                                    "src": "13053:4:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_Math_$8014_$",
                                      "typeString": "type(library Math)"
                                    }
                                  },
                                  "id": 4275,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "13058:7:20",
                                  "memberName": "average",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 6743,
                                  "src": "13053:12:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 4278,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "13053:23:20",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "13039:37:20"
                            },
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 4285,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "arguments": [
                                    {
                                      "id": 4281,
                                      "name": "array",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4246,
                                      "src": "13320:5:20",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                        "typeString": "uint256[] memory"
                                      }
                                    },
                                    {
                                      "id": 4282,
                                      "name": "mid",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4273,
                                      "src": "13327:3:20",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                        "typeString": "uint256[] memory"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 4280,
                                    "name": "unsafeMemoryAccess",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [
                                      4511,
                                      4524,
                                      4537,
                                      4550,
                                      4563
                                    ],
                                    "referencedDeclaration": 4537,
                                    "src": "13301:18:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$returns$_t_uint256_$",
                                      "typeString": "function (uint256[] memory,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 4283,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "13301:30:20",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<",
                                "rightExpression": {
                                  "id": 4284,
                                  "name": "element",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4248,
                                  "src": "13334:7:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "13301:40:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": {
                                "id": 4298,
                                "nodeType": "Block",
                                "src": "13504:43:20",
                                "statements": [
                                  {
                                    "expression": {
                                      "id": 4296,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "id": 4294,
                                        "name": "high",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4258,
                                        "src": "13522:4:20",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "id": 4295,
                                        "name": "mid",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4273,
                                        "src": "13529:3:20",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "13522:10:20",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 4297,
                                    "nodeType": "ExpressionStatement",
                                    "src": "13522:10:20"
                                  }
                                ]
                              },
                              "id": 4299,
                              "nodeType": "IfStatement",
                              "src": "13297:250:20",
                              "trueBody": {
                                "id": 4293,
                                "nodeType": "Block",
                                "src": "13343:155:20",
                                "statements": [
                                  {
                                    "id": 4292,
                                    "nodeType": "UncheckedBlock",
                                    "src": "13420:64:20",
                                    "statements": [
                                      {
                                        "expression": {
                                          "id": 4290,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftHandSide": {
                                            "id": 4286,
                                            "name": "low",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4254,
                                            "src": "13452:3:20",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "Assignment",
                                          "operator": "=",
                                          "rightHandSide": {
                                            "commonType": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            },
                                            "id": 4289,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                              "id": 4287,
                                              "name": "mid",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 4273,
                                              "src": "13458:3:20",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "+",
                                            "rightExpression": {
                                              "hexValue": "31",
                                              "id": 4288,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "number",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "13464:1:20",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_rational_1_by_1",
                                                "typeString": "int_const 1"
                                              },
                                              "value": "1"
                                            },
                                            "src": "13458:7:20",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "src": "13452:13:20",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "id": 4291,
                                        "nodeType": "ExpressionStatement",
                                        "src": "13452:13:20"
                                      }
                                    ]
                                  }
                                ]
                              }
                            }
                          ]
                        },
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4271,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 4269,
                            "name": "low",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4254,
                            "src": "13013:3:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "id": 4270,
                            "name": "high",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4258,
                            "src": "13019:4:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "13013:10:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4301,
                        "nodeType": "WhileStatement",
                        "src": "13006:551:20"
                      },
                      {
                        "expression": {
                          "id": 4302,
                          "name": "low",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4254,
                          "src": "13574:3:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 4252,
                        "id": 4303,
                        "nodeType": "Return",
                        "src": "13567:10:20"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4243,
                    "nodeType": "StructuredDocumentation",
                    "src": "12697:74:20",
                    "text": " @dev Same as {lowerBound}, but with an array in memory."
                  },
                  "id": 4305,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "lowerBoundMemory",
                  "nameLocation": "12785:16:20",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4249,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4246,
                        "mutability": "mutable",
                        "name": "array",
                        "nameLocation": "12819:5:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4305,
                        "src": "12802:22:20",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 4244,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "12802:7:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 4245,
                          "nodeType": "ArrayTypeName",
                          "src": "12802:9:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                            "typeString": "uint256[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4248,
                        "mutability": "mutable",
                        "name": "element",
                        "nameLocation": "12834:7:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4305,
                        "src": "12826:15:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4247,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "12826:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "12801:41:20"
                  },
                  "returnParameters": {
                    "id": 4252,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4251,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 4305,
                        "src": "12866:7:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4250,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "12866:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "12865:9:20"
                  },
                  "scope": 4619,
                  "src": "12776:808:20",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4367,
                    "nodeType": "Block",
                    "src": "13768:709:20",
                    "statements": [
                      {
                        "assignments": [
                          4317
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4317,
                            "mutability": "mutable",
                            "name": "low",
                            "nameLocation": "13786:3:20",
                            "nodeType": "VariableDeclaration",
                            "scope": 4367,
                            "src": "13778:11:20",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 4316,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "13778:7:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4319,
                        "initialValue": {
                          "hexValue": "30",
                          "id": 4318,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "13792:1:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "13778:15:20"
                      },
                      {
                        "assignments": [
                          4321
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4321,
                            "mutability": "mutable",
                            "name": "high",
                            "nameLocation": "13811:4:20",
                            "nodeType": "VariableDeclaration",
                            "scope": 4367,
                            "src": "13803:12:20",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 4320,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "13803:7:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4324,
                        "initialValue": {
                          "expression": {
                            "id": 4322,
                            "name": "array",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4309,
                            "src": "13818:5:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                              "typeString": "uint256[] memory"
                            }
                          },
                          "id": 4323,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "13824:6:20",
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "13818:12:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "13803:27:20"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4327,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 4325,
                            "name": "high",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4321,
                            "src": "13845:4:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 4326,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "13853:1:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "13845:9:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4331,
                        "nodeType": "IfStatement",
                        "src": "13841:48:20",
                        "trueBody": {
                          "id": 4330,
                          "nodeType": "Block",
                          "src": "13856:33:20",
                          "statements": [
                            {
                              "expression": {
                                "hexValue": "30",
                                "id": 4328,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "13877:1:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "functionReturnParameters": 4315,
                              "id": 4329,
                              "nodeType": "Return",
                              "src": "13870:8:20"
                            }
                          ]
                        }
                      },
                      {
                        "body": {
                          "id": 4363,
                          "nodeType": "Block",
                          "src": "13918:532:20",
                          "statements": [
                            {
                              "assignments": [
                                4336
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 4336,
                                  "mutability": "mutable",
                                  "name": "mid",
                                  "nameLocation": "13940:3:20",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 4363,
                                  "src": "13932:11:20",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 4335,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "13932:7:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 4342,
                              "initialValue": {
                                "arguments": [
                                  {
                                    "id": 4339,
                                    "name": "low",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4317,
                                    "src": "13959:3:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "id": 4340,
                                    "name": "high",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4321,
                                    "src": "13964:4:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "id": 4337,
                                    "name": "Math",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8014,
                                    "src": "13946:4:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_Math_$8014_$",
                                      "typeString": "type(library Math)"
                                    }
                                  },
                                  "id": 4338,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "13951:7:20",
                                  "memberName": "average",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 6743,
                                  "src": "13946:12:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 4341,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "13946:23:20",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "13932:37:20"
                            },
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 4348,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "arguments": [
                                    {
                                      "id": 4344,
                                      "name": "array",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4309,
                                      "src": "14213:5:20",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                        "typeString": "uint256[] memory"
                                      }
                                    },
                                    {
                                      "id": 4345,
                                      "name": "mid",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4336,
                                      "src": "14220:3:20",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                        "typeString": "uint256[] memory"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 4343,
                                    "name": "unsafeMemoryAccess",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [
                                      4511,
                                      4524,
                                      4537,
                                      4550,
                                      4563
                                    ],
                                    "referencedDeclaration": 4537,
                                    "src": "14194:18:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$returns$_t_uint256_$",
                                      "typeString": "function (uint256[] memory,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 4346,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "14194:30:20",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">",
                                "rightExpression": {
                                  "id": 4347,
                                  "name": "element",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4311,
                                  "src": "14227:7:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "14194:40:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": {
                                "id": 4361,
                                "nodeType": "Block",
                                "src": "14285:155:20",
                                "statements": [
                                  {
                                    "id": 4360,
                                    "nodeType": "UncheckedBlock",
                                    "src": "14362:64:20",
                                    "statements": [
                                      {
                                        "expression": {
                                          "id": 4358,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftHandSide": {
                                            "id": 4354,
                                            "name": "low",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4317,
                                            "src": "14394:3:20",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "Assignment",
                                          "operator": "=",
                                          "rightHandSide": {
                                            "commonType": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            },
                                            "id": 4357,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                              "id": 4355,
                                              "name": "mid",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 4336,
                                              "src": "14400:3:20",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "+",
                                            "rightExpression": {
                                              "hexValue": "31",
                                              "id": 4356,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "number",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "14406:1:20",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_rational_1_by_1",
                                                "typeString": "int_const 1"
                                              },
                                              "value": "1"
                                            },
                                            "src": "14400:7:20",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "src": "14394:13:20",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "id": 4359,
                                        "nodeType": "ExpressionStatement",
                                        "src": "14394:13:20"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "id": 4362,
                              "nodeType": "IfStatement",
                              "src": "14190:250:20",
                              "trueBody": {
                                "id": 4353,
                                "nodeType": "Block",
                                "src": "14236:43:20",
                                "statements": [
                                  {
                                    "expression": {
                                      "id": 4351,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "id": 4349,
                                        "name": "high",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4321,
                                        "src": "14254:4:20",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "id": 4350,
                                        "name": "mid",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4336,
                                        "src": "14261:3:20",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "14254:10:20",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 4352,
                                    "nodeType": "ExpressionStatement",
                                    "src": "14254:10:20"
                                  }
                                ]
                              }
                            }
                          ]
                        },
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4334,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 4332,
                            "name": "low",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4317,
                            "src": "13906:3:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "id": 4333,
                            "name": "high",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4321,
                            "src": "13912:4:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "13906:10:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4364,
                        "nodeType": "WhileStatement",
                        "src": "13899:551:20"
                      },
                      {
                        "expression": {
                          "id": 4365,
                          "name": "low",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4317,
                          "src": "14467:3:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 4315,
                        "id": 4366,
                        "nodeType": "Return",
                        "src": "14460:10:20"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4306,
                    "nodeType": "StructuredDocumentation",
                    "src": "13590:74:20",
                    "text": " @dev Same as {upperBound}, but with an array in memory."
                  },
                  "id": 4368,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "upperBoundMemory",
                  "nameLocation": "13678:16:20",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4312,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4309,
                        "mutability": "mutable",
                        "name": "array",
                        "nameLocation": "13712:5:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4368,
                        "src": "13695:22:20",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 4307,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "13695:7:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 4308,
                          "nodeType": "ArrayTypeName",
                          "src": "13695:9:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                            "typeString": "uint256[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4311,
                        "mutability": "mutable",
                        "name": "element",
                        "nameLocation": "13727:7:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4368,
                        "src": "13719:15:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4310,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "13719:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "13694:41:20"
                  },
                  "returnParameters": {
                    "id": 4315,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4314,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 4368,
                        "src": "13759:7:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4313,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "13759:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "13758:9:20"
                  },
                  "scope": 4619,
                  "src": "13669:808:20",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4393,
                    "nodeType": "Block",
                    "src": "14793:167:20",
                    "statements": [
                      {
                        "assignments": [
                          4381
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4381,
                            "mutability": "mutable",
                            "name": "slot",
                            "nameLocation": "14811:4:20",
                            "nodeType": "VariableDeclaration",
                            "scope": 4393,
                            "src": "14803:12:20",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            "typeName": {
                              "id": 4380,
                              "name": "bytes32",
                              "nodeType": "ElementaryTypeName",
                              "src": "14803:7:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4382,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "14803:12:20"
                      },
                      {
                        "AST": {
                          "nativeSrc": "14850:40:20",
                          "nodeType": "YulBlock",
                          "src": "14850:40:20",
                          "statements": [
                            {
                              "nativeSrc": "14864:16:20",
                              "nodeType": "YulAssignment",
                              "src": "14864:16:20",
                              "value": {
                                "name": "arr.slot",
                                "nativeSrc": "14872:8:20",
                                "nodeType": "YulIdentifier",
                                "src": "14872:8:20"
                              },
                              "variableNames": [
                                {
                                  "name": "slot",
                                  "nativeSrc": "14864:4:20",
                                  "nodeType": "YulIdentifier",
                                  "src": "14864:4:20"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "paris",
                        "externalReferences": [
                          {
                            "declaration": 4372,
                            "isOffset": false,
                            "isSlot": true,
                            "src": "14872:8:20",
                            "suffix": "slot",
                            "valueSize": 1
                          },
                          {
                            "declaration": 4381,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "14864:4:20",
                            "valueSize": 1
                          }
                        ],
                        "flags": [
                          "memory-safe"
                        ],
                        "id": 4383,
                        "nodeType": "InlineAssembly",
                        "src": "14825:65:20"
                      },
                      {
                        "expression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 4388,
                                  "name": "pos",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4374,
                                  "src": "14932:3:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "arguments": [],
                                  "expression": {
                                    "argumentTypes": [],
                                    "expression": {
                                      "id": 4384,
                                      "name": "slot",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4381,
                                      "src": "14906:4:20",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    },
                                    "id": 4385,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "14911:11:20",
                                    "memberName": "deriveArray",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 4770,
                                    "src": "14906:16:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_bytes32_$attached_to$_t_bytes32_$",
                                      "typeString": "function (bytes32) pure returns (bytes32)"
                                    }
                                  },
                                  "id": 4386,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "14906:18:20",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "id": 4387,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "14925:6:20",
                                "memberName": "offset",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 4760,
                                "src": "14906:25:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$",
                                  "typeString": "function (bytes32,uint256) pure returns (bytes32)"
                                }
                              },
                              "id": 4389,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "14906:30:20",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "id": 4390,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "14937:14:20",
                            "memberName": "getAddressSlot",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4890,
                            "src": "14906:45:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_struct$_AddressSlot_$4861_storage_ptr_$attached_to$_t_bytes32_$",
                              "typeString": "function (bytes32) pure returns (struct StorageSlot.AddressSlot storage pointer)"
                            }
                          },
                          "id": 4391,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14906:47:20",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_AddressSlot_$4861_storage_ptr",
                            "typeString": "struct StorageSlot.AddressSlot storage pointer"
                          }
                        },
                        "functionReturnParameters": 4379,
                        "id": 4392,
                        "nodeType": "Return",
                        "src": "14899:54:20"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4369,
                    "nodeType": "StructuredDocumentation",
                    "src": "14483:191:20",
                    "text": " @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n WARNING: Only use if you are certain `pos` is lower than the array length."
                  },
                  "id": 4394,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "unsafeAccess",
                  "nameLocation": "14688:12:20",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4375,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4372,
                        "mutability": "mutable",
                        "name": "arr",
                        "nameLocation": "14719:3:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4394,
                        "src": "14701:21:20",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 4370,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "14701:7:20",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 4371,
                          "nodeType": "ArrayTypeName",
                          "src": "14701:9:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                            "typeString": "address[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4374,
                        "mutability": "mutable",
                        "name": "pos",
                        "nameLocation": "14732:3:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4394,
                        "src": "14724:11:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4373,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "14724:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "14700:36:20"
                  },
                  "returnParameters": {
                    "id": 4379,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4378,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 4394,
                        "src": "14760:31:20",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AddressSlot_$4861_storage_ptr",
                          "typeString": "struct StorageSlot.AddressSlot"
                        },
                        "typeName": {
                          "id": 4377,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 4376,
                            "name": "StorageSlot.AddressSlot",
                            "nameLocations": [
                              "14760:11:20",
                              "14772:11:20"
                            ],
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 4861,
                            "src": "14760:23:20"
                          },
                          "referencedDeclaration": 4861,
                          "src": "14760:23:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_AddressSlot_$4861_storage_ptr",
                            "typeString": "struct StorageSlot.AddressSlot"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "14759:33:20"
                  },
                  "scope": 4619,
                  "src": "14679:281:20",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4419,
                    "nodeType": "Block",
                    "src": "15276:167:20",
                    "statements": [
                      {
                        "assignments": [
                          4407
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4407,
                            "mutability": "mutable",
                            "name": "slot",
                            "nameLocation": "15294:4:20",
                            "nodeType": "VariableDeclaration",
                            "scope": 4419,
                            "src": "15286:12:20",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            "typeName": {
                              "id": 4406,
                              "name": "bytes32",
                              "nodeType": "ElementaryTypeName",
                              "src": "15286:7:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4408,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "15286:12:20"
                      },
                      {
                        "AST": {
                          "nativeSrc": "15333:40:20",
                          "nodeType": "YulBlock",
                          "src": "15333:40:20",
                          "statements": [
                            {
                              "nativeSrc": "15347:16:20",
                              "nodeType": "YulAssignment",
                              "src": "15347:16:20",
                              "value": {
                                "name": "arr.slot",
                                "nativeSrc": "15355:8:20",
                                "nodeType": "YulIdentifier",
                                "src": "15355:8:20"
                              },
                              "variableNames": [
                                {
                                  "name": "slot",
                                  "nativeSrc": "15347:4:20",
                                  "nodeType": "YulIdentifier",
                                  "src": "15347:4:20"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "paris",
                        "externalReferences": [
                          {
                            "declaration": 4398,
                            "isOffset": false,
                            "isSlot": true,
                            "src": "15355:8:20",
                            "suffix": "slot",
                            "valueSize": 1
                          },
                          {
                            "declaration": 4407,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "15347:4:20",
                            "valueSize": 1
                          }
                        ],
                        "flags": [
                          "memory-safe"
                        ],
                        "id": 4409,
                        "nodeType": "InlineAssembly",
                        "src": "15308:65:20"
                      },
                      {
                        "expression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 4414,
                                  "name": "pos",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4400,
                                  "src": "15415:3:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "arguments": [],
                                  "expression": {
                                    "argumentTypes": [],
                                    "expression": {
                                      "id": 4410,
                                      "name": "slot",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4407,
                                      "src": "15389:4:20",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    },
                                    "id": 4411,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "15394:11:20",
                                    "memberName": "deriveArray",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 4770,
                                    "src": "15389:16:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_bytes32_$attached_to$_t_bytes32_$",
                                      "typeString": "function (bytes32) pure returns (bytes32)"
                                    }
                                  },
                                  "id": 4412,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "15389:18:20",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "id": 4413,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "15408:6:20",
                                "memberName": "offset",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 4760,
                                "src": "15389:25:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$",
                                  "typeString": "function (bytes32,uint256) pure returns (bytes32)"
                                }
                              },
                              "id": 4415,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "15389:30:20",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "id": 4416,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "15420:14:20",
                            "memberName": "getBytes32Slot",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4912,
                            "src": "15389:45:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_struct$_Bytes32Slot_$4867_storage_ptr_$attached_to$_t_bytes32_$",
                              "typeString": "function (bytes32) pure returns (struct StorageSlot.Bytes32Slot storage pointer)"
                            }
                          },
                          "id": 4417,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "15389:47:20",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Bytes32Slot_$4867_storage_ptr",
                            "typeString": "struct StorageSlot.Bytes32Slot storage pointer"
                          }
                        },
                        "functionReturnParameters": 4405,
                        "id": 4418,
                        "nodeType": "Return",
                        "src": "15382:54:20"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4395,
                    "nodeType": "StructuredDocumentation",
                    "src": "14966:191:20",
                    "text": " @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n WARNING: Only use if you are certain `pos` is lower than the array length."
                  },
                  "id": 4420,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "unsafeAccess",
                  "nameLocation": "15171:12:20",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4401,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4398,
                        "mutability": "mutable",
                        "name": "arr",
                        "nameLocation": "15202:3:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4420,
                        "src": "15184:21:20",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 4396,
                            "name": "bytes32",
                            "nodeType": "ElementaryTypeName",
                            "src": "15184:7:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "id": 4397,
                          "nodeType": "ArrayTypeName",
                          "src": "15184:9:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                            "typeString": "bytes32[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4400,
                        "mutability": "mutable",
                        "name": "pos",
                        "nameLocation": "15215:3:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4420,
                        "src": "15207:11:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4399,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "15207:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "15183:36:20"
                  },
                  "returnParameters": {
                    "id": 4405,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4404,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 4420,
                        "src": "15243:31:20",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Bytes32Slot_$4867_storage_ptr",
                          "typeString": "struct StorageSlot.Bytes32Slot"
                        },
                        "typeName": {
                          "id": 4403,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 4402,
                            "name": "StorageSlot.Bytes32Slot",
                            "nameLocations": [
                              "15243:11:20",
                              "15255:11:20"
                            ],
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 4867,
                            "src": "15243:23:20"
                          },
                          "referencedDeclaration": 4867,
                          "src": "15243:23:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Bytes32Slot_$4867_storage_ptr",
                            "typeString": "struct StorageSlot.Bytes32Slot"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "15242:33:20"
                  },
                  "scope": 4619,
                  "src": "15162:281:20",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4445,
                    "nodeType": "Block",
                    "src": "15759:167:20",
                    "statements": [
                      {
                        "assignments": [
                          4433
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4433,
                            "mutability": "mutable",
                            "name": "slot",
                            "nameLocation": "15777:4:20",
                            "nodeType": "VariableDeclaration",
                            "scope": 4445,
                            "src": "15769:12:20",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            "typeName": {
                              "id": 4432,
                              "name": "bytes32",
                              "nodeType": "ElementaryTypeName",
                              "src": "15769:7:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4434,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "15769:12:20"
                      },
                      {
                        "AST": {
                          "nativeSrc": "15816:40:20",
                          "nodeType": "YulBlock",
                          "src": "15816:40:20",
                          "statements": [
                            {
                              "nativeSrc": "15830:16:20",
                              "nodeType": "YulAssignment",
                              "src": "15830:16:20",
                              "value": {
                                "name": "arr.slot",
                                "nativeSrc": "15838:8:20",
                                "nodeType": "YulIdentifier",
                                "src": "15838:8:20"
                              },
                              "variableNames": [
                                {
                                  "name": "slot",
                                  "nativeSrc": "15830:4:20",
                                  "nodeType": "YulIdentifier",
                                  "src": "15830:4:20"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "paris",
                        "externalReferences": [
                          {
                            "declaration": 4424,
                            "isOffset": false,
                            "isSlot": true,
                            "src": "15838:8:20",
                            "suffix": "slot",
                            "valueSize": 1
                          },
                          {
                            "declaration": 4433,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "15830:4:20",
                            "valueSize": 1
                          }
                        ],
                        "flags": [
                          "memory-safe"
                        ],
                        "id": 4435,
                        "nodeType": "InlineAssembly",
                        "src": "15791:65:20"
                      },
                      {
                        "expression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 4440,
                                  "name": "pos",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4426,
                                  "src": "15898:3:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "arguments": [],
                                  "expression": {
                                    "argumentTypes": [],
                                    "expression": {
                                      "id": 4436,
                                      "name": "slot",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4433,
                                      "src": "15872:4:20",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    },
                                    "id": 4437,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "15877:11:20",
                                    "memberName": "deriveArray",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 4770,
                                    "src": "15872:16:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_bytes32_$attached_to$_t_bytes32_$",
                                      "typeString": "function (bytes32) pure returns (bytes32)"
                                    }
                                  },
                                  "id": 4438,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "15872:18:20",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "id": 4439,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "15891:6:20",
                                "memberName": "offset",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 4760,
                                "src": "15872:25:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$",
                                  "typeString": "function (bytes32,uint256) pure returns (bytes32)"
                                }
                              },
                              "id": 4441,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "15872:30:20",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "id": 4442,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "15903:14:20",
                            "memberName": "getUint256Slot",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4923,
                            "src": "15872:45:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_struct$_Uint256Slot_$4870_storage_ptr_$attached_to$_t_bytes32_$",
                              "typeString": "function (bytes32) pure returns (struct StorageSlot.Uint256Slot storage pointer)"
                            }
                          },
                          "id": 4443,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "15872:47:20",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Uint256Slot_$4870_storage_ptr",
                            "typeString": "struct StorageSlot.Uint256Slot storage pointer"
                          }
                        },
                        "functionReturnParameters": 4431,
                        "id": 4444,
                        "nodeType": "Return",
                        "src": "15865:54:20"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4421,
                    "nodeType": "StructuredDocumentation",
                    "src": "15449:191:20",
                    "text": " @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n WARNING: Only use if you are certain `pos` is lower than the array length."
                  },
                  "id": 4446,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "unsafeAccess",
                  "nameLocation": "15654:12:20",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4427,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4424,
                        "mutability": "mutable",
                        "name": "arr",
                        "nameLocation": "15685:3:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4446,
                        "src": "15667:21:20",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                          "typeString": "uint256[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 4422,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "15667:7:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 4423,
                          "nodeType": "ArrayTypeName",
                          "src": "15667:9:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                            "typeString": "uint256[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4426,
                        "mutability": "mutable",
                        "name": "pos",
                        "nameLocation": "15698:3:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4446,
                        "src": "15690:11:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4425,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "15690:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "15666:36:20"
                  },
                  "returnParameters": {
                    "id": 4431,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4430,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 4446,
                        "src": "15726:31:20",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Uint256Slot_$4870_storage_ptr",
                          "typeString": "struct StorageSlot.Uint256Slot"
                        },
                        "typeName": {
                          "id": 4429,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 4428,
                            "name": "StorageSlot.Uint256Slot",
                            "nameLocations": [
                              "15726:11:20",
                              "15738:11:20"
                            ],
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 4870,
                            "src": "15726:23:20"
                          },
                          "referencedDeclaration": 4870,
                          "src": "15726:23:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Uint256Slot_$4870_storage_ptr",
                            "typeString": "struct StorageSlot.Uint256Slot"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "15725:33:20"
                  },
                  "scope": 4619,
                  "src": "15645:281:20",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4471,
                    "nodeType": "Block",
                    "src": "16238:165:20",
                    "statements": [
                      {
                        "assignments": [
                          4459
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4459,
                            "mutability": "mutable",
                            "name": "slot",
                            "nameLocation": "16256:4:20",
                            "nodeType": "VariableDeclaration",
                            "scope": 4471,
                            "src": "16248:12:20",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            "typeName": {
                              "id": 4458,
                              "name": "bytes32",
                              "nodeType": "ElementaryTypeName",
                              "src": "16248:7:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4460,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "16248:12:20"
                      },
                      {
                        "AST": {
                          "nativeSrc": "16295:40:20",
                          "nodeType": "YulBlock",
                          "src": "16295:40:20",
                          "statements": [
                            {
                              "nativeSrc": "16309:16:20",
                              "nodeType": "YulAssignment",
                              "src": "16309:16:20",
                              "value": {
                                "name": "arr.slot",
                                "nativeSrc": "16317:8:20",
                                "nodeType": "YulIdentifier",
                                "src": "16317:8:20"
                              },
                              "variableNames": [
                                {
                                  "name": "slot",
                                  "nativeSrc": "16309:4:20",
                                  "nodeType": "YulIdentifier",
                                  "src": "16309:4:20"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "paris",
                        "externalReferences": [
                          {
                            "declaration": 4450,
                            "isOffset": false,
                            "isSlot": true,
                            "src": "16317:8:20",
                            "suffix": "slot",
                            "valueSize": 1
                          },
                          {
                            "declaration": 4459,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "16309:4:20",
                            "valueSize": 1
                          }
                        ],
                        "flags": [
                          "memory-safe"
                        ],
                        "id": 4461,
                        "nodeType": "InlineAssembly",
                        "src": "16270:65:20"
                      },
                      {
                        "expression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 4466,
                                  "name": "pos",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4452,
                                  "src": "16377:3:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "arguments": [],
                                  "expression": {
                                    "argumentTypes": [],
                                    "expression": {
                                      "id": 4462,
                                      "name": "slot",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4459,
                                      "src": "16351:4:20",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    },
                                    "id": 4463,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "16356:11:20",
                                    "memberName": "deriveArray",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 4770,
                                    "src": "16351:16:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_bytes32_$attached_to$_t_bytes32_$",
                                      "typeString": "function (bytes32) pure returns (bytes32)"
                                    }
                                  },
                                  "id": 4464,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "16351:18:20",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "id": 4465,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "16370:6:20",
                                "memberName": "offset",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 4760,
                                "src": "16351:25:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$",
                                  "typeString": "function (bytes32,uint256) pure returns (bytes32)"
                                }
                              },
                              "id": 4467,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "16351:30:20",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "id": 4468,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "16382:12:20",
                            "memberName": "getBytesSlot",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4967,
                            "src": "16351:43:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_struct$_BytesSlot_$4879_storage_ptr_$attached_to$_t_bytes32_$",
                              "typeString": "function (bytes32) pure returns (struct StorageSlot.BytesSlot storage pointer)"
                            }
                          },
                          "id": 4469,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16351:45:20",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_BytesSlot_$4879_storage_ptr",
                            "typeString": "struct StorageSlot.BytesSlot storage pointer"
                          }
                        },
                        "functionReturnParameters": 4457,
                        "id": 4470,
                        "nodeType": "Return",
                        "src": "16344:52:20"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4447,
                    "nodeType": "StructuredDocumentation",
                    "src": "15932:191:20",
                    "text": " @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n WARNING: Only use if you are certain `pos` is lower than the array length."
                  },
                  "id": 4472,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "unsafeAccess",
                  "nameLocation": "16137:12:20",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4453,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4450,
                        "mutability": "mutable",
                        "name": "arr",
                        "nameLocation": "16166:3:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4472,
                        "src": "16150:19:20",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr",
                          "typeString": "bytes[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 4448,
                            "name": "bytes",
                            "nodeType": "ElementaryTypeName",
                            "src": "16150:5:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_storage_ptr",
                              "typeString": "bytes"
                            }
                          },
                          "id": 4449,
                          "nodeType": "ArrayTypeName",
                          "src": "16150:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr",
                            "typeString": "bytes[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4452,
                        "mutability": "mutable",
                        "name": "pos",
                        "nameLocation": "16179:3:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4472,
                        "src": "16171:11:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4451,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "16171:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "16149:34:20"
                  },
                  "returnParameters": {
                    "id": 4457,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4456,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 4472,
                        "src": "16207:29:20",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_BytesSlot_$4879_storage_ptr",
                          "typeString": "struct StorageSlot.BytesSlot"
                        },
                        "typeName": {
                          "id": 4455,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 4454,
                            "name": "StorageSlot.BytesSlot",
                            "nameLocations": [
                              "16207:11:20",
                              "16219:9:20"
                            ],
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 4879,
                            "src": "16207:21:20"
                          },
                          "referencedDeclaration": 4879,
                          "src": "16207:21:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_BytesSlot_$4879_storage_ptr",
                            "typeString": "struct StorageSlot.BytesSlot"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "16206:31:20"
                  },
                  "scope": 4619,
                  "src": "16128:275:20",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4497,
                    "nodeType": "Block",
                    "src": "16717:166:20",
                    "statements": [
                      {
                        "assignments": [
                          4485
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4485,
                            "mutability": "mutable",
                            "name": "slot",
                            "nameLocation": "16735:4:20",
                            "nodeType": "VariableDeclaration",
                            "scope": 4497,
                            "src": "16727:12:20",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            "typeName": {
                              "id": 4484,
                              "name": "bytes32",
                              "nodeType": "ElementaryTypeName",
                              "src": "16727:7:20",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4486,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "16727:12:20"
                      },
                      {
                        "AST": {
                          "nativeSrc": "16774:40:20",
                          "nodeType": "YulBlock",
                          "src": "16774:40:20",
                          "statements": [
                            {
                              "nativeSrc": "16788:16:20",
                              "nodeType": "YulAssignment",
                              "src": "16788:16:20",
                              "value": {
                                "name": "arr.slot",
                                "nativeSrc": "16796:8:20",
                                "nodeType": "YulIdentifier",
                                "src": "16796:8:20"
                              },
                              "variableNames": [
                                {
                                  "name": "slot",
                                  "nativeSrc": "16788:4:20",
                                  "nodeType": "YulIdentifier",
                                  "src": "16788:4:20"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "paris",
                        "externalReferences": [
                          {
                            "declaration": 4476,
                            "isOffset": false,
                            "isSlot": true,
                            "src": "16796:8:20",
                            "suffix": "slot",
                            "valueSize": 1
                          },
                          {
                            "declaration": 4485,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "16788:4:20",
                            "valueSize": 1
                          }
                        ],
                        "flags": [
                          "memory-safe"
                        ],
                        "id": 4487,
                        "nodeType": "InlineAssembly",
                        "src": "16749:65:20"
                      },
                      {
                        "expression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 4492,
                                  "name": "pos",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4478,
                                  "src": "16856:3:20",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "arguments": [],
                                  "expression": {
                                    "argumentTypes": [],
                                    "expression": {
                                      "id": 4488,
                                      "name": "slot",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4485,
                                      "src": "16830:4:20",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    },
                                    "id": 4489,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "16835:11:20",
                                    "memberName": "deriveArray",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 4770,
                                    "src": "16830:16:20",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_bytes32_$attached_to$_t_bytes32_$",
                                      "typeString": "function (bytes32) pure returns (bytes32)"
                                    }
                                  },
                                  "id": 4490,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "16830:18:20",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "id": 4491,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "16849:6:20",
                                "memberName": "offset",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 4760,
                                "src": "16830:25:20",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$",
                                  "typeString": "function (bytes32,uint256) pure returns (bytes32)"
                                }
                              },
                              "id": 4493,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "16830:30:20",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "id": 4494,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "16861:13:20",
                            "memberName": "getStringSlot",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4945,
                            "src": "16830:44:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_struct$_StringSlot_$4876_storage_ptr_$attached_to$_t_bytes32_$",
                              "typeString": "function (bytes32) pure returns (struct StorageSlot.StringSlot storage pointer)"
                            }
                          },
                          "id": 4495,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16830:46:20",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_StringSlot_$4876_storage_ptr",
                            "typeString": "struct StorageSlot.StringSlot storage pointer"
                          }
                        },
                        "functionReturnParameters": 4483,
                        "id": 4496,
                        "nodeType": "Return",
                        "src": "16823:53:20"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4473,
                    "nodeType": "StructuredDocumentation",
                    "src": "16409:191:20",
                    "text": " @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n WARNING: Only use if you are certain `pos` is lower than the array length."
                  },
                  "id": 4498,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "unsafeAccess",
                  "nameLocation": "16614:12:20",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4479,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4476,
                        "mutability": "mutable",
                        "name": "arr",
                        "nameLocation": "16644:3:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4498,
                        "src": "16627:20:20",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_string_storage_$dyn_storage_ptr",
                          "typeString": "string[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 4474,
                            "name": "string",
                            "nodeType": "ElementaryTypeName",
                            "src": "16627:6:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_storage_ptr",
                              "typeString": "string"
                            }
                          },
                          "id": 4475,
                          "nodeType": "ArrayTypeName",
                          "src": "16627:8:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_string_storage_$dyn_storage_ptr",
                            "typeString": "string[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4478,
                        "mutability": "mutable",
                        "name": "pos",
                        "nameLocation": "16657:3:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4498,
                        "src": "16649:11:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4477,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "16649:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "16626:35:20"
                  },
                  "returnParameters": {
                    "id": 4483,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4482,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 4498,
                        "src": "16685:30:20",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_StringSlot_$4876_storage_ptr",
                          "typeString": "struct StorageSlot.StringSlot"
                        },
                        "typeName": {
                          "id": 4481,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 4480,
                            "name": "StorageSlot.StringSlot",
                            "nameLocations": [
                              "16685:11:20",
                              "16697:10:20"
                            ],
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 4876,
                            "src": "16685:22:20"
                          },
                          "referencedDeclaration": 4876,
                          "src": "16685:22:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_StringSlot_$4876_storage_ptr",
                            "typeString": "struct StorageSlot.StringSlot"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "16684:32:20"
                  },
                  "scope": 4619,
                  "src": "16605:278:20",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4510,
                    "nodeType": "Block",
                    "src": "17184:98:20",
                    "statements": [
                      {
                        "AST": {
                          "nativeSrc": "17203:73:20",
                          "nodeType": "YulBlock",
                          "src": "17203:73:20",
                          "statements": [
                            {
                              "nativeSrc": "17217:49:20",
                              "nodeType": "YulAssignment",
                              "src": "17217:49:20",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "arr",
                                            "nativeSrc": "17238:3:20",
                                            "nodeType": "YulIdentifier",
                                            "src": "17238:3:20"
                                          },
                                          {
                                            "kind": "number",
                                            "nativeSrc": "17243:4:20",
                                            "nodeType": "YulLiteral",
                                            "src": "17243:4:20",
                                            "type": "",
                                            "value": "0x20"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nativeSrc": "17234:3:20",
                                          "nodeType": "YulIdentifier",
                                          "src": "17234:3:20"
                                        },
                                        "nativeSrc": "17234:14:20",
                                        "nodeType": "YulFunctionCall",
                                        "src": "17234:14:20"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "pos",
                                            "nativeSrc": "17254:3:20",
                                            "nodeType": "YulIdentifier",
                                            "src": "17254:3:20"
                                          },
                                          {
                                            "kind": "number",
                                            "nativeSrc": "17259:4:20",
                                            "nodeType": "YulLiteral",
                                            "src": "17259:4:20",
                                            "type": "",
                                            "value": "0x20"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "mul",
                                          "nativeSrc": "17250:3:20",
                                          "nodeType": "YulIdentifier",
                                          "src": "17250:3:20"
                                        },
                                        "nativeSrc": "17250:14:20",
                                        "nodeType": "YulFunctionCall",
                                        "src": "17250:14:20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nativeSrc": "17230:3:20",
                                      "nodeType": "YulIdentifier",
                                      "src": "17230:3:20"
                                    },
                                    "nativeSrc": "17230:35:20",
                                    "nodeType": "YulFunctionCall",
                                    "src": "17230:35:20"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nativeSrc": "17224:5:20",
                                  "nodeType": "YulIdentifier",
                                  "src": "17224:5:20"
                                },
                                "nativeSrc": "17224:42:20",
                                "nodeType": "YulFunctionCall",
                                "src": "17224:42:20"
                              },
                              "variableNames": [
                                {
                                  "name": "res",
                                  "nativeSrc": "17217:3:20",
                                  "nodeType": "YulIdentifier",
                                  "src": "17217:3:20"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "paris",
                        "externalReferences": [
                          {
                            "declaration": 4502,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "17238:3:20",
                            "valueSize": 1
                          },
                          {
                            "declaration": 4504,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "17254:3:20",
                            "valueSize": 1
                          },
                          {
                            "declaration": 4507,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "17217:3:20",
                            "valueSize": 1
                          }
                        ],
                        "id": 4509,
                        "nodeType": "InlineAssembly",
                        "src": "17194:82:20"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4499,
                    "nodeType": "StructuredDocumentation",
                    "src": "16889:191:20",
                    "text": " @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n WARNING: Only use if you are certain `pos` is lower than the array length."
                  },
                  "id": 4511,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "unsafeMemoryAccess",
                  "nameLocation": "17094:18:20",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4505,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4502,
                        "mutability": "mutable",
                        "name": "arr",
                        "nameLocation": "17130:3:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4511,
                        "src": "17113:20:20",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 4500,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "17113:7:20",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 4501,
                          "nodeType": "ArrayTypeName",
                          "src": "17113:9:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                            "typeString": "address[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4504,
                        "mutability": "mutable",
                        "name": "pos",
                        "nameLocation": "17143:3:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4511,
                        "src": "17135:11:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4503,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "17135:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "17112:35:20"
                  },
                  "returnParameters": {
                    "id": 4508,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4507,
                        "mutability": "mutable",
                        "name": "res",
                        "nameLocation": "17179:3:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4511,
                        "src": "17171:11:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4506,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "17171:7:20",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "17170:13:20"
                  },
                  "scope": 4619,
                  "src": "17085:197:20",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4523,
                    "nodeType": "Block",
                    "src": "17583:98:20",
                    "statements": [
                      {
                        "AST": {
                          "nativeSrc": "17602:73:20",
                          "nodeType": "YulBlock",
                          "src": "17602:73:20",
                          "statements": [
                            {
                              "nativeSrc": "17616:49:20",
                              "nodeType": "YulAssignment",
                              "src": "17616:49:20",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "arr",
                                            "nativeSrc": "17637:3:20",
                                            "nodeType": "YulIdentifier",
                                            "src": "17637:3:20"
                                          },
                                          {
                                            "kind": "number",
                                            "nativeSrc": "17642:4:20",
                                            "nodeType": "YulLiteral",
                                            "src": "17642:4:20",
                                            "type": "",
                                            "value": "0x20"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nativeSrc": "17633:3:20",
                                          "nodeType": "YulIdentifier",
                                          "src": "17633:3:20"
                                        },
                                        "nativeSrc": "17633:14:20",
                                        "nodeType": "YulFunctionCall",
                                        "src": "17633:14:20"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "pos",
                                            "nativeSrc": "17653:3:20",
                                            "nodeType": "YulIdentifier",
                                            "src": "17653:3:20"
                                          },
                                          {
                                            "kind": "number",
                                            "nativeSrc": "17658:4:20",
                                            "nodeType": "YulLiteral",
                                            "src": "17658:4:20",
                                            "type": "",
                                            "value": "0x20"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "mul",
                                          "nativeSrc": "17649:3:20",
                                          "nodeType": "YulIdentifier",
                                          "src": "17649:3:20"
                                        },
                                        "nativeSrc": "17649:14:20",
                                        "nodeType": "YulFunctionCall",
                                        "src": "17649:14:20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nativeSrc": "17629:3:20",
                                      "nodeType": "YulIdentifier",
                                      "src": "17629:3:20"
                                    },
                                    "nativeSrc": "17629:35:20",
                                    "nodeType": "YulFunctionCall",
                                    "src": "17629:35:20"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nativeSrc": "17623:5:20",
                                  "nodeType": "YulIdentifier",
                                  "src": "17623:5:20"
                                },
                                "nativeSrc": "17623:42:20",
                                "nodeType": "YulFunctionCall",
                                "src": "17623:42:20"
                              },
                              "variableNames": [
                                {
                                  "name": "res",
                                  "nativeSrc": "17616:3:20",
                                  "nodeType": "YulIdentifier",
                                  "src": "17616:3:20"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "paris",
                        "externalReferences": [
                          {
                            "declaration": 4515,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "17637:3:20",
                            "valueSize": 1
                          },
                          {
                            "declaration": 4517,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "17653:3:20",
                            "valueSize": 1
                          },
                          {
                            "declaration": 4520,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "17616:3:20",
                            "valueSize": 1
                          }
                        ],
                        "id": 4522,
                        "nodeType": "InlineAssembly",
                        "src": "17593:82:20"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4512,
                    "nodeType": "StructuredDocumentation",
                    "src": "17288:191:20",
                    "text": " @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n WARNING: Only use if you are certain `pos` is lower than the array length."
                  },
                  "id": 4524,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "unsafeMemoryAccess",
                  "nameLocation": "17493:18:20",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4518,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4515,
                        "mutability": "mutable",
                        "name": "arr",
                        "nameLocation": "17529:3:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4524,
                        "src": "17512:20:20",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 4513,
                            "name": "bytes32",
                            "nodeType": "ElementaryTypeName",
                            "src": "17512:7:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "id": 4514,
                          "nodeType": "ArrayTypeName",
                          "src": "17512:9:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                            "typeString": "bytes32[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4517,
                        "mutability": "mutable",
                        "name": "pos",
                        "nameLocation": "17542:3:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4524,
                        "src": "17534:11:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4516,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "17534:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "17511:35:20"
                  },
                  "returnParameters": {
                    "id": 4521,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4520,
                        "mutability": "mutable",
                        "name": "res",
                        "nameLocation": "17578:3:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4524,
                        "src": "17570:11:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4519,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "17570:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "17569:13:20"
                  },
                  "scope": 4619,
                  "src": "17484:197:20",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4536,
                    "nodeType": "Block",
                    "src": "17982:98:20",
                    "statements": [
                      {
                        "AST": {
                          "nativeSrc": "18001:73:20",
                          "nodeType": "YulBlock",
                          "src": "18001:73:20",
                          "statements": [
                            {
                              "nativeSrc": "18015:49:20",
                              "nodeType": "YulAssignment",
                              "src": "18015:49:20",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "arr",
                                            "nativeSrc": "18036:3:20",
                                            "nodeType": "YulIdentifier",
                                            "src": "18036:3:20"
                                          },
                                          {
                                            "kind": "number",
                                            "nativeSrc": "18041:4:20",
                                            "nodeType": "YulLiteral",
                                            "src": "18041:4:20",
                                            "type": "",
                                            "value": "0x20"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nativeSrc": "18032:3:20",
                                          "nodeType": "YulIdentifier",
                                          "src": "18032:3:20"
                                        },
                                        "nativeSrc": "18032:14:20",
                                        "nodeType": "YulFunctionCall",
                                        "src": "18032:14:20"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "pos",
                                            "nativeSrc": "18052:3:20",
                                            "nodeType": "YulIdentifier",
                                            "src": "18052:3:20"
                                          },
                                          {
                                            "kind": "number",
                                            "nativeSrc": "18057:4:20",
                                            "nodeType": "YulLiteral",
                                            "src": "18057:4:20",
                                            "type": "",
                                            "value": "0x20"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "mul",
                                          "nativeSrc": "18048:3:20",
                                          "nodeType": "YulIdentifier",
                                          "src": "18048:3:20"
                                        },
                                        "nativeSrc": "18048:14:20",
                                        "nodeType": "YulFunctionCall",
                                        "src": "18048:14:20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nativeSrc": "18028:3:20",
                                      "nodeType": "YulIdentifier",
                                      "src": "18028:3:20"
                                    },
                                    "nativeSrc": "18028:35:20",
                                    "nodeType": "YulFunctionCall",
                                    "src": "18028:35:20"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nativeSrc": "18022:5:20",
                                  "nodeType": "YulIdentifier",
                                  "src": "18022:5:20"
                                },
                                "nativeSrc": "18022:42:20",
                                "nodeType": "YulFunctionCall",
                                "src": "18022:42:20"
                              },
                              "variableNames": [
                                {
                                  "name": "res",
                                  "nativeSrc": "18015:3:20",
                                  "nodeType": "YulIdentifier",
                                  "src": "18015:3:20"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "paris",
                        "externalReferences": [
                          {
                            "declaration": 4528,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "18036:3:20",
                            "valueSize": 1
                          },
                          {
                            "declaration": 4530,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "18052:3:20",
                            "valueSize": 1
                          },
                          {
                            "declaration": 4533,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "18015:3:20",
                            "valueSize": 1
                          }
                        ],
                        "id": 4535,
                        "nodeType": "InlineAssembly",
                        "src": "17992:82:20"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4525,
                    "nodeType": "StructuredDocumentation",
                    "src": "17687:191:20",
                    "text": " @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n WARNING: Only use if you are certain `pos` is lower than the array length."
                  },
                  "id": 4537,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "unsafeMemoryAccess",
                  "nameLocation": "17892:18:20",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4531,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4528,
                        "mutability": "mutable",
                        "name": "arr",
                        "nameLocation": "17928:3:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4537,
                        "src": "17911:20:20",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 4526,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "17911:7:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 4527,
                          "nodeType": "ArrayTypeName",
                          "src": "17911:9:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                            "typeString": "uint256[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4530,
                        "mutability": "mutable",
                        "name": "pos",
                        "nameLocation": "17941:3:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4537,
                        "src": "17933:11:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4529,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "17933:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "17910:35:20"
                  },
                  "returnParameters": {
                    "id": 4534,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4533,
                        "mutability": "mutable",
                        "name": "res",
                        "nameLocation": "17977:3:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4537,
                        "src": "17969:11:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4532,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "17969:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "17968:13:20"
                  },
                  "scope": 4619,
                  "src": "17883:197:20",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4549,
                    "nodeType": "Block",
                    "src": "18384:98:20",
                    "statements": [
                      {
                        "AST": {
                          "nativeSrc": "18403:73:20",
                          "nodeType": "YulBlock",
                          "src": "18403:73:20",
                          "statements": [
                            {
                              "nativeSrc": "18417:49:20",
                              "nodeType": "YulAssignment",
                              "src": "18417:49:20",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "arr",
                                            "nativeSrc": "18438:3:20",
                                            "nodeType": "YulIdentifier",
                                            "src": "18438:3:20"
                                          },
                                          {
                                            "kind": "number",
                                            "nativeSrc": "18443:4:20",
                                            "nodeType": "YulLiteral",
                                            "src": "18443:4:20",
                                            "type": "",
                                            "value": "0x20"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nativeSrc": "18434:3:20",
                                          "nodeType": "YulIdentifier",
                                          "src": "18434:3:20"
                                        },
                                        "nativeSrc": "18434:14:20",
                                        "nodeType": "YulFunctionCall",
                                        "src": "18434:14:20"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "pos",
                                            "nativeSrc": "18454:3:20",
                                            "nodeType": "YulIdentifier",
                                            "src": "18454:3:20"
                                          },
                                          {
                                            "kind": "number",
                                            "nativeSrc": "18459:4:20",
                                            "nodeType": "YulLiteral",
                                            "src": "18459:4:20",
                                            "type": "",
                                            "value": "0x20"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "mul",
                                          "nativeSrc": "18450:3:20",
                                          "nodeType": "YulIdentifier",
                                          "src": "18450:3:20"
                                        },
                                        "nativeSrc": "18450:14:20",
                                        "nodeType": "YulFunctionCall",
                                        "src": "18450:14:20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nativeSrc": "18430:3:20",
                                      "nodeType": "YulIdentifier",
                                      "src": "18430:3:20"
                                    },
                                    "nativeSrc": "18430:35:20",
                                    "nodeType": "YulFunctionCall",
                                    "src": "18430:35:20"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nativeSrc": "18424:5:20",
                                  "nodeType": "YulIdentifier",
                                  "src": "18424:5:20"
                                },
                                "nativeSrc": "18424:42:20",
                                "nodeType": "YulFunctionCall",
                                "src": "18424:42:20"
                              },
                              "variableNames": [
                                {
                                  "name": "res",
                                  "nativeSrc": "18417:3:20",
                                  "nodeType": "YulIdentifier",
                                  "src": "18417:3:20"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "paris",
                        "externalReferences": [
                          {
                            "declaration": 4541,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "18438:3:20",
                            "valueSize": 1
                          },
                          {
                            "declaration": 4543,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "18454:3:20",
                            "valueSize": 1
                          },
                          {
                            "declaration": 4546,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "18417:3:20",
                            "valueSize": 1
                          }
                        ],
                        "id": 4548,
                        "nodeType": "InlineAssembly",
                        "src": "18394:82:20"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4538,
                    "nodeType": "StructuredDocumentation",
                    "src": "18086:191:20",
                    "text": " @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n WARNING: Only use if you are certain `pos` is lower than the array length."
                  },
                  "id": 4550,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "unsafeMemoryAccess",
                  "nameLocation": "18291:18:20",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4544,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4541,
                        "mutability": "mutable",
                        "name": "arr",
                        "nameLocation": "18325:3:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4550,
                        "src": "18310:18:20",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes_memory_ptr_$dyn_memory_ptr",
                          "typeString": "bytes[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 4539,
                            "name": "bytes",
                            "nodeType": "ElementaryTypeName",
                            "src": "18310:5:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_storage_ptr",
                              "typeString": "bytes"
                            }
                          },
                          "id": 4540,
                          "nodeType": "ArrayTypeName",
                          "src": "18310:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr",
                            "typeString": "bytes[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4543,
                        "mutability": "mutable",
                        "name": "pos",
                        "nameLocation": "18338:3:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4550,
                        "src": "18330:11:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4542,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "18330:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "18309:33:20"
                  },
                  "returnParameters": {
                    "id": 4547,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4546,
                        "mutability": "mutable",
                        "name": "res",
                        "nameLocation": "18379:3:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4550,
                        "src": "18366:16:20",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 4545,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "18366:5:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "18365:18:20"
                  },
                  "scope": 4619,
                  "src": "18282:200:20",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4562,
                    "nodeType": "Block",
                    "src": "18788:98:20",
                    "statements": [
                      {
                        "AST": {
                          "nativeSrc": "18807:73:20",
                          "nodeType": "YulBlock",
                          "src": "18807:73:20",
                          "statements": [
                            {
                              "nativeSrc": "18821:49:20",
                              "nodeType": "YulAssignment",
                              "src": "18821:49:20",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "arr",
                                            "nativeSrc": "18842:3:20",
                                            "nodeType": "YulIdentifier",
                                            "src": "18842:3:20"
                                          },
                                          {
                                            "kind": "number",
                                            "nativeSrc": "18847:4:20",
                                            "nodeType": "YulLiteral",
                                            "src": "18847:4:20",
                                            "type": "",
                                            "value": "0x20"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nativeSrc": "18838:3:20",
                                          "nodeType": "YulIdentifier",
                                          "src": "18838:3:20"
                                        },
                                        "nativeSrc": "18838:14:20",
                                        "nodeType": "YulFunctionCall",
                                        "src": "18838:14:20"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "pos",
                                            "nativeSrc": "18858:3:20",
                                            "nodeType": "YulIdentifier",
                                            "src": "18858:3:20"
                                          },
                                          {
                                            "kind": "number",
                                            "nativeSrc": "18863:4:20",
                                            "nodeType": "YulLiteral",
                                            "src": "18863:4:20",
                                            "type": "",
                                            "value": "0x20"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "mul",
                                          "nativeSrc": "18854:3:20",
                                          "nodeType": "YulIdentifier",
                                          "src": "18854:3:20"
                                        },
                                        "nativeSrc": "18854:14:20",
                                        "nodeType": "YulFunctionCall",
                                        "src": "18854:14:20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nativeSrc": "18834:3:20",
                                      "nodeType": "YulIdentifier",
                                      "src": "18834:3:20"
                                    },
                                    "nativeSrc": "18834:35:20",
                                    "nodeType": "YulFunctionCall",
                                    "src": "18834:35:20"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nativeSrc": "18828:5:20",
                                  "nodeType": "YulIdentifier",
                                  "src": "18828:5:20"
                                },
                                "nativeSrc": "18828:42:20",
                                "nodeType": "YulFunctionCall",
                                "src": "18828:42:20"
                              },
                              "variableNames": [
                                {
                                  "name": "res",
                                  "nativeSrc": "18821:3:20",
                                  "nodeType": "YulIdentifier",
                                  "src": "18821:3:20"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "paris",
                        "externalReferences": [
                          {
                            "declaration": 4554,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "18842:3:20",
                            "valueSize": 1
                          },
                          {
                            "declaration": 4556,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "18858:3:20",
                            "valueSize": 1
                          },
                          {
                            "declaration": 4559,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "18821:3:20",
                            "valueSize": 1
                          }
                        ],
                        "id": 4561,
                        "nodeType": "InlineAssembly",
                        "src": "18798:82:20"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4551,
                    "nodeType": "StructuredDocumentation",
                    "src": "18488:191:20",
                    "text": " @dev Access an array in an \"unsafe\" way. Skips solidity \"index-out-of-range\" check.\n WARNING: Only use if you are certain `pos` is lower than the array length."
                  },
                  "id": 4563,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "unsafeMemoryAccess",
                  "nameLocation": "18693:18:20",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4557,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4554,
                        "mutability": "mutable",
                        "name": "arr",
                        "nameLocation": "18728:3:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4563,
                        "src": "18712:19:20",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_string_memory_ptr_$dyn_memory_ptr",
                          "typeString": "string[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 4552,
                            "name": "string",
                            "nodeType": "ElementaryTypeName",
                            "src": "18712:6:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_storage_ptr",
                              "typeString": "string"
                            }
                          },
                          "id": 4553,
                          "nodeType": "ArrayTypeName",
                          "src": "18712:8:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_string_storage_$dyn_storage_ptr",
                            "typeString": "string[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4556,
                        "mutability": "mutable",
                        "name": "pos",
                        "nameLocation": "18741:3:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4563,
                        "src": "18733:11:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4555,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "18733:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "18711:34:20"
                  },
                  "returnParameters": {
                    "id": 4560,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4559,
                        "mutability": "mutable",
                        "name": "res",
                        "nameLocation": "18783:3:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4563,
                        "src": "18769:17:20",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 4558,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "18769:6:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "18768:19:20"
                  },
                  "scope": 4619,
                  "src": "18684:202:20",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4573,
                    "nodeType": "Block",
                    "src": "19202:88:20",
                    "statements": [
                      {
                        "AST": {
                          "nativeSrc": "19237:47:20",
                          "nodeType": "YulBlock",
                          "src": "19237:47:20",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "array.slot",
                                    "nativeSrc": "19258:10:20",
                                    "nodeType": "YulIdentifier",
                                    "src": "19258:10:20"
                                  },
                                  {
                                    "name": "len",
                                    "nativeSrc": "19270:3:20",
                                    "nodeType": "YulIdentifier",
                                    "src": "19270:3:20"
                                  }
                                ],
                                "functionName": {
                                  "name": "sstore",
                                  "nativeSrc": "19251:6:20",
                                  "nodeType": "YulIdentifier",
                                  "src": "19251:6:20"
                                },
                                "nativeSrc": "19251:23:20",
                                "nodeType": "YulFunctionCall",
                                "src": "19251:23:20"
                              },
                              "nativeSrc": "19251:23:20",
                              "nodeType": "YulExpressionStatement",
                              "src": "19251:23:20"
                            }
                          ]
                        },
                        "evmVersion": "paris",
                        "externalReferences": [
                          {
                            "declaration": 4567,
                            "isOffset": false,
                            "isSlot": true,
                            "src": "19258:10:20",
                            "suffix": "slot",
                            "valueSize": 1
                          },
                          {
                            "declaration": 4569,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "19270:3:20",
                            "valueSize": 1
                          }
                        ],
                        "flags": [
                          "memory-safe"
                        ],
                        "id": 4572,
                        "nodeType": "InlineAssembly",
                        "src": "19212:72:20"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4564,
                    "nodeType": "StructuredDocumentation",
                    "src": "18892:233:20",
                    "text": " @dev Helper to set the length of a dynamic array. Directly writing to `.length` is forbidden.\n WARNING: this does not clear elements if length is reduced, of initialize elements if length is increased."
                  },
                  "id": 4574,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "unsafeSetLength",
                  "nameLocation": "19139:15:20",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4570,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4567,
                        "mutability": "mutable",
                        "name": "array",
                        "nameLocation": "19173:5:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4574,
                        "src": "19155:23:20",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                          "typeString": "address[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 4565,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "19155:7:20",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 4566,
                          "nodeType": "ArrayTypeName",
                          "src": "19155:9:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                            "typeString": "address[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4569,
                        "mutability": "mutable",
                        "name": "len",
                        "nameLocation": "19188:3:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4574,
                        "src": "19180:11:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4568,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "19180:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "19154:38:20"
                  },
                  "returnParameters": {
                    "id": 4571,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "19202:0:20"
                  },
                  "scope": 4619,
                  "src": "19130:160:20",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4584,
                    "nodeType": "Block",
                    "src": "19606:88:20",
                    "statements": [
                      {
                        "AST": {
                          "nativeSrc": "19641:47:20",
                          "nodeType": "YulBlock",
                          "src": "19641:47:20",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "array.slot",
                                    "nativeSrc": "19662:10:20",
                                    "nodeType": "YulIdentifier",
                                    "src": "19662:10:20"
                                  },
                                  {
                                    "name": "len",
                                    "nativeSrc": "19674:3:20",
                                    "nodeType": "YulIdentifier",
                                    "src": "19674:3:20"
                                  }
                                ],
                                "functionName": {
                                  "name": "sstore",
                                  "nativeSrc": "19655:6:20",
                                  "nodeType": "YulIdentifier",
                                  "src": "19655:6:20"
                                },
                                "nativeSrc": "19655:23:20",
                                "nodeType": "YulFunctionCall",
                                "src": "19655:23:20"
                              },
                              "nativeSrc": "19655:23:20",
                              "nodeType": "YulExpressionStatement",
                              "src": "19655:23:20"
                            }
                          ]
                        },
                        "evmVersion": "paris",
                        "externalReferences": [
                          {
                            "declaration": 4578,
                            "isOffset": false,
                            "isSlot": true,
                            "src": "19662:10:20",
                            "suffix": "slot",
                            "valueSize": 1
                          },
                          {
                            "declaration": 4580,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "19674:3:20",
                            "valueSize": 1
                          }
                        ],
                        "flags": [
                          "memory-safe"
                        ],
                        "id": 4583,
                        "nodeType": "InlineAssembly",
                        "src": "19616:72:20"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4575,
                    "nodeType": "StructuredDocumentation",
                    "src": "19296:233:20",
                    "text": " @dev Helper to set the length of a dynamic array. Directly writing to `.length` is forbidden.\n WARNING: this does not clear elements if length is reduced, of initialize elements if length is increased."
                  },
                  "id": 4585,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "unsafeSetLength",
                  "nameLocation": "19543:15:20",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4581,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4578,
                        "mutability": "mutable",
                        "name": "array",
                        "nameLocation": "19577:5:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4585,
                        "src": "19559:23:20",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 4576,
                            "name": "bytes32",
                            "nodeType": "ElementaryTypeName",
                            "src": "19559:7:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "id": 4577,
                          "nodeType": "ArrayTypeName",
                          "src": "19559:9:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                            "typeString": "bytes32[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4580,
                        "mutability": "mutable",
                        "name": "len",
                        "nameLocation": "19592:3:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4585,
                        "src": "19584:11:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4579,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "19584:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "19558:38:20"
                  },
                  "returnParameters": {
                    "id": 4582,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "19606:0:20"
                  },
                  "scope": 4619,
                  "src": "19534:160:20",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4595,
                    "nodeType": "Block",
                    "src": "20010:88:20",
                    "statements": [
                      {
                        "AST": {
                          "nativeSrc": "20045:47:20",
                          "nodeType": "YulBlock",
                          "src": "20045:47:20",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "array.slot",
                                    "nativeSrc": "20066:10:20",
                                    "nodeType": "YulIdentifier",
                                    "src": "20066:10:20"
                                  },
                                  {
                                    "name": "len",
                                    "nativeSrc": "20078:3:20",
                                    "nodeType": "YulIdentifier",
                                    "src": "20078:3:20"
                                  }
                                ],
                                "functionName": {
                                  "name": "sstore",
                                  "nativeSrc": "20059:6:20",
                                  "nodeType": "YulIdentifier",
                                  "src": "20059:6:20"
                                },
                                "nativeSrc": "20059:23:20",
                                "nodeType": "YulFunctionCall",
                                "src": "20059:23:20"
                              },
                              "nativeSrc": "20059:23:20",
                              "nodeType": "YulExpressionStatement",
                              "src": "20059:23:20"
                            }
                          ]
                        },
                        "evmVersion": "paris",
                        "externalReferences": [
                          {
                            "declaration": 4589,
                            "isOffset": false,
                            "isSlot": true,
                            "src": "20066:10:20",
                            "suffix": "slot",
                            "valueSize": 1
                          },
                          {
                            "declaration": 4591,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "20078:3:20",
                            "valueSize": 1
                          }
                        ],
                        "flags": [
                          "memory-safe"
                        ],
                        "id": 4594,
                        "nodeType": "InlineAssembly",
                        "src": "20020:72:20"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4586,
                    "nodeType": "StructuredDocumentation",
                    "src": "19700:233:20",
                    "text": " @dev Helper to set the length of a dynamic array. Directly writing to `.length` is forbidden.\n WARNING: this does not clear elements if length is reduced, of initialize elements if length is increased."
                  },
                  "id": 4596,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "unsafeSetLength",
                  "nameLocation": "19947:15:20",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4592,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4589,
                        "mutability": "mutable",
                        "name": "array",
                        "nameLocation": "19981:5:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4596,
                        "src": "19963:23:20",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                          "typeString": "uint256[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 4587,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "19963:7:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 4588,
                          "nodeType": "ArrayTypeName",
                          "src": "19963:9:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                            "typeString": "uint256[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4591,
                        "mutability": "mutable",
                        "name": "len",
                        "nameLocation": "19996:3:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4596,
                        "src": "19988:11:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4590,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "19988:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "19962:38:20"
                  },
                  "returnParameters": {
                    "id": 4593,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "20010:0:20"
                  },
                  "scope": 4619,
                  "src": "19938:160:20",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4606,
                    "nodeType": "Block",
                    "src": "20412:88:20",
                    "statements": [
                      {
                        "AST": {
                          "nativeSrc": "20447:47:20",
                          "nodeType": "YulBlock",
                          "src": "20447:47:20",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "array.slot",
                                    "nativeSrc": "20468:10:20",
                                    "nodeType": "YulIdentifier",
                                    "src": "20468:10:20"
                                  },
                                  {
                                    "name": "len",
                                    "nativeSrc": "20480:3:20",
                                    "nodeType": "YulIdentifier",
                                    "src": "20480:3:20"
                                  }
                                ],
                                "functionName": {
                                  "name": "sstore",
                                  "nativeSrc": "20461:6:20",
                                  "nodeType": "YulIdentifier",
                                  "src": "20461:6:20"
                                },
                                "nativeSrc": "20461:23:20",
                                "nodeType": "YulFunctionCall",
                                "src": "20461:23:20"
                              },
                              "nativeSrc": "20461:23:20",
                              "nodeType": "YulExpressionStatement",
                              "src": "20461:23:20"
                            }
                          ]
                        },
                        "evmVersion": "paris",
                        "externalReferences": [
                          {
                            "declaration": 4600,
                            "isOffset": false,
                            "isSlot": true,
                            "src": "20468:10:20",
                            "suffix": "slot",
                            "valueSize": 1
                          },
                          {
                            "declaration": 4602,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "20480:3:20",
                            "valueSize": 1
                          }
                        ],
                        "flags": [
                          "memory-safe"
                        ],
                        "id": 4605,
                        "nodeType": "InlineAssembly",
                        "src": "20422:72:20"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4597,
                    "nodeType": "StructuredDocumentation",
                    "src": "20104:233:20",
                    "text": " @dev Helper to set the length of a dynamic array. Directly writing to `.length` is forbidden.\n WARNING: this does not clear elements if length is reduced, of initialize elements if length is increased."
                  },
                  "id": 4607,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "unsafeSetLength",
                  "nameLocation": "20351:15:20",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4603,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4600,
                        "mutability": "mutable",
                        "name": "array",
                        "nameLocation": "20383:5:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4607,
                        "src": "20367:21:20",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr",
                          "typeString": "bytes[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 4598,
                            "name": "bytes",
                            "nodeType": "ElementaryTypeName",
                            "src": "20367:5:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_storage_ptr",
                              "typeString": "bytes"
                            }
                          },
                          "id": 4599,
                          "nodeType": "ArrayTypeName",
                          "src": "20367:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr",
                            "typeString": "bytes[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4602,
                        "mutability": "mutable",
                        "name": "len",
                        "nameLocation": "20398:3:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4607,
                        "src": "20390:11:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4601,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "20390:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "20366:36:20"
                  },
                  "returnParameters": {
                    "id": 4604,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "20412:0:20"
                  },
                  "scope": 4619,
                  "src": "20342:158:20",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4617,
                    "nodeType": "Block",
                    "src": "20815:88:20",
                    "statements": [
                      {
                        "AST": {
                          "nativeSrc": "20850:47:20",
                          "nodeType": "YulBlock",
                          "src": "20850:47:20",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "array.slot",
                                    "nativeSrc": "20871:10:20",
                                    "nodeType": "YulIdentifier",
                                    "src": "20871:10:20"
                                  },
                                  {
                                    "name": "len",
                                    "nativeSrc": "20883:3:20",
                                    "nodeType": "YulIdentifier",
                                    "src": "20883:3:20"
                                  }
                                ],
                                "functionName": {
                                  "name": "sstore",
                                  "nativeSrc": "20864:6:20",
                                  "nodeType": "YulIdentifier",
                                  "src": "20864:6:20"
                                },
                                "nativeSrc": "20864:23:20",
                                "nodeType": "YulFunctionCall",
                                "src": "20864:23:20"
                              },
                              "nativeSrc": "20864:23:20",
                              "nodeType": "YulExpressionStatement",
                              "src": "20864:23:20"
                            }
                          ]
                        },
                        "evmVersion": "paris",
                        "externalReferences": [
                          {
                            "declaration": 4611,
                            "isOffset": false,
                            "isSlot": true,
                            "src": "20871:10:20",
                            "suffix": "slot",
                            "valueSize": 1
                          },
                          {
                            "declaration": 4613,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "20883:3:20",
                            "valueSize": 1
                          }
                        ],
                        "flags": [
                          "memory-safe"
                        ],
                        "id": 4616,
                        "nodeType": "InlineAssembly",
                        "src": "20825:72:20"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4608,
                    "nodeType": "StructuredDocumentation",
                    "src": "20506:233:20",
                    "text": " @dev Helper to set the length of a dynamic array. Directly writing to `.length` is forbidden.\n WARNING: this does not clear elements if length is reduced, of initialize elements if length is increased."
                  },
                  "id": 4618,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "unsafeSetLength",
                  "nameLocation": "20753:15:20",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4614,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4611,
                        "mutability": "mutable",
                        "name": "array",
                        "nameLocation": "20786:5:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4618,
                        "src": "20769:22:20",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_string_storage_$dyn_storage_ptr",
                          "typeString": "string[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 4609,
                            "name": "string",
                            "nodeType": "ElementaryTypeName",
                            "src": "20769:6:20",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_storage_ptr",
                              "typeString": "string"
                            }
                          },
                          "id": 4610,
                          "nodeType": "ArrayTypeName",
                          "src": "20769:8:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_string_storage_$dyn_storage_ptr",
                            "typeString": "string[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4613,
                        "mutability": "mutable",
                        "name": "len",
                        "nameLocation": "20801:3:20",
                        "nodeType": "VariableDeclaration",
                        "scope": 4618,
                        "src": "20793:11:20",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4612,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "20793:7:20",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "20768:37:20"
                  },
                  "returnParameters": {
                    "id": 4615,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "20815:0:20"
                  },
                  "scope": 4619,
                  "src": "20744:159:20",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 4620,
              "src": "459:20446:20",
              "usedErrors": [],
              "usedEvents": []
            }
          ],
          "src": "183:20723:20"
        },
        "id": 20
      },
      "@openzeppelin/contracts/utils/Comparators.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/utils/Comparators.sol",
          "exportedSymbols": {
            "Comparators": [
              4651
            ]
          },
          "id": 4652,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 4621,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".20"
              ],
              "nodeType": "PragmaDirective",
              "src": "105:24:21"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "canonicalName": "Comparators",
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 4622,
                "nodeType": "StructuredDocumentation",
                "src": "131:92:21",
                "text": " @dev Provides a set of functions to compare values.\n _Available since v5.1._"
              },
              "fullyImplemented": true,
              "id": 4651,
              "linearizedBaseContracts": [
                4651
              ],
              "name": "Comparators",
              "nameLocation": "232:11:21",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 4635,
                    "nodeType": "Block",
                    "src": "313:29:21",
                    "statements": [
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4633,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 4631,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4624,
                            "src": "330:1:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "id": 4632,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4626,
                            "src": "334:1:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "330:5:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 4630,
                        "id": 4634,
                        "nodeType": "Return",
                        "src": "323:12:21"
                      }
                    ]
                  },
                  "id": 4636,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "lt",
                  "nameLocation": "259:2:21",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4627,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4624,
                        "mutability": "mutable",
                        "name": "a",
                        "nameLocation": "270:1:21",
                        "nodeType": "VariableDeclaration",
                        "scope": 4636,
                        "src": "262:9:21",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4623,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "262:7:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4626,
                        "mutability": "mutable",
                        "name": "b",
                        "nameLocation": "281:1:21",
                        "nodeType": "VariableDeclaration",
                        "scope": 4636,
                        "src": "273:9:21",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4625,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "273:7:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "261:22:21"
                  },
                  "returnParameters": {
                    "id": 4630,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4629,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 4636,
                        "src": "307:4:21",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 4628,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "307:4:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "306:6:21"
                  },
                  "scope": 4651,
                  "src": "250:92:21",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4649,
                    "nodeType": "Block",
                    "src": "411:29:21",
                    "statements": [
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4647,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 4645,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4638,
                            "src": "428:1:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "id": 4646,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4640,
                            "src": "432:1:21",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "428:5:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 4644,
                        "id": 4648,
                        "nodeType": "Return",
                        "src": "421:12:21"
                      }
                    ]
                  },
                  "id": 4650,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "gt",
                  "nameLocation": "357:2:21",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4641,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4638,
                        "mutability": "mutable",
                        "name": "a",
                        "nameLocation": "368:1:21",
                        "nodeType": "VariableDeclaration",
                        "scope": 4650,
                        "src": "360:9:21",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4637,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "360:7:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4640,
                        "mutability": "mutable",
                        "name": "b",
                        "nameLocation": "379:1:21",
                        "nodeType": "VariableDeclaration",
                        "scope": 4650,
                        "src": "371:9:21",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4639,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "371:7:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "359:22:21"
                  },
                  "returnParameters": {
                    "id": 4644,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4643,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 4650,
                        "src": "405:4:21",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 4642,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "405:4:21",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "404:6:21"
                  },
                  "scope": 4651,
                  "src": "348:92:21",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 4652,
              "src": "224:218:21",
              "usedErrors": [],
              "usedEvents": []
            }
          ],
          "src": "105:338:21"
        },
        "id": 21
      },
      "@openzeppelin/contracts/utils/Errors.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/utils/Errors.sol",
          "exportedSymbols": {
            "Errors": [
              4673
            ]
          },
          "id": 4674,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 4653,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".20"
              ],
              "nodeType": "PragmaDirective",
              "src": "100:24:22"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "canonicalName": "Errors",
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 4654,
                "nodeType": "StructuredDocumentation",
                "src": "126:284:22",
                "text": " @dev Collection of common custom errors used in multiple contracts\n IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library.\n It is recommended to avoid relying on the error API for critical functionality.\n _Available since v5.1._"
              },
              "fullyImplemented": true,
              "id": 4673,
              "linearizedBaseContracts": [
                4673
              ],
              "name": "Errors",
              "nameLocation": "419:6:22",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "documentation": {
                    "id": 4655,
                    "nodeType": "StructuredDocumentation",
                    "src": "432:94:22",
                    "text": " @dev The ETH balance of the account is not enough to perform the operation."
                  },
                  "errorSelector": "cf479181",
                  "id": 4661,
                  "name": "InsufficientBalance",
                  "nameLocation": "537:19:22",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 4660,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4657,
                        "mutability": "mutable",
                        "name": "balance",
                        "nameLocation": "565:7:22",
                        "nodeType": "VariableDeclaration",
                        "scope": 4661,
                        "src": "557:15:22",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4656,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "557:7:22",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4659,
                        "mutability": "mutable",
                        "name": "needed",
                        "nameLocation": "582:6:22",
                        "nodeType": "VariableDeclaration",
                        "scope": 4661,
                        "src": "574:14:22",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4658,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "574:7:22",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "556:33:22"
                  },
                  "src": "531:59:22"
                },
                {
                  "documentation": {
                    "id": 4662,
                    "nodeType": "StructuredDocumentation",
                    "src": "596:89:22",
                    "text": " @dev A call to an address target failed. The target may have reverted."
                  },
                  "errorSelector": "d6bda275",
                  "id": 4664,
                  "name": "FailedCall",
                  "nameLocation": "696:10:22",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 4663,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "706:2:22"
                  },
                  "src": "690:19:22"
                },
                {
                  "documentation": {
                    "id": 4665,
                    "nodeType": "StructuredDocumentation",
                    "src": "715:46:22",
                    "text": " @dev The deployment failed."
                  },
                  "errorSelector": "b06ebf3d",
                  "id": 4667,
                  "name": "FailedDeployment",
                  "nameLocation": "772:16:22",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 4666,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "788:2:22"
                  },
                  "src": "766:25:22"
                },
                {
                  "documentation": {
                    "id": 4668,
                    "nodeType": "StructuredDocumentation",
                    "src": "797:58:22",
                    "text": " @dev A necessary precompile is missing."
                  },
                  "errorSelector": "42b01bce",
                  "id": 4672,
                  "name": "MissingPrecompile",
                  "nameLocation": "866:17:22",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 4671,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4670,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 4672,
                        "src": "884:7:22",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4669,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "884:7:22",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "883:9:22"
                  },
                  "src": "860:33:22"
                }
              ],
              "scope": 4674,
              "src": "411:484:22",
              "usedErrors": [
                4661,
                4664,
                4667,
                4672
              ],
              "usedEvents": []
            }
          ],
          "src": "100:796:22"
        },
        "id": 22
      },
      "@openzeppelin/contracts/utils/Panic.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/utils/Panic.sol",
          "exportedSymbols": {
            "Panic": [
              4725
            ]
          },
          "id": 4726,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 4675,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".20"
              ],
              "nodeType": "PragmaDirective",
              "src": "99:24:23"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "canonicalName": "Panic",
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 4676,
                "nodeType": "StructuredDocumentation",
                "src": "125:489:23",
                "text": " @dev Helper library for emitting standardized panic codes.\n ```solidity\n contract Example {\n      using Panic for uint256;\n      // Use any of the declared internal constants\n      function foo() { Panic.GENERIC.panic(); }\n      // Alternatively\n      function foo() { Panic.panic(Panic.GENERIC); }\n }\n ```\n Follows the list from https://github.com/ethereum/solidity/blob/v0.8.24/libsolutil/ErrorCodes.h[libsolutil].\n _Available since v5.1._"
              },
              "fullyImplemented": true,
              "id": 4725,
              "linearizedBaseContracts": [
                4725
              ],
              "name": "Panic",
              "nameLocation": "665:5:23",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "constant": true,
                  "documentation": {
                    "id": 4677,
                    "nodeType": "StructuredDocumentation",
                    "src": "677:36:23",
                    "text": "@dev generic / unspecified error"
                  },
                  "id": 4680,
                  "mutability": "constant",
                  "name": "GENERIC",
                  "nameLocation": "744:7:23",
                  "nodeType": "VariableDeclaration",
                  "scope": 4725,
                  "src": "718:40:23",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4678,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "718:7:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "hexValue": "30783030",
                    "id": 4679,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "754:4:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0x00"
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "documentation": {
                    "id": 4681,
                    "nodeType": "StructuredDocumentation",
                    "src": "764:37:23",
                    "text": "@dev used by the assert() builtin"
                  },
                  "id": 4684,
                  "mutability": "constant",
                  "name": "ASSERT",
                  "nameLocation": "832:6:23",
                  "nodeType": "VariableDeclaration",
                  "scope": 4725,
                  "src": "806:39:23",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4682,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "806:7:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "hexValue": "30783031",
                    "id": 4683,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "841:4:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_1_by_1",
                      "typeString": "int_const 1"
                    },
                    "value": "0x01"
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "documentation": {
                    "id": 4685,
                    "nodeType": "StructuredDocumentation",
                    "src": "851:41:23",
                    "text": "@dev arithmetic underflow or overflow"
                  },
                  "id": 4688,
                  "mutability": "constant",
                  "name": "UNDER_OVERFLOW",
                  "nameLocation": "923:14:23",
                  "nodeType": "VariableDeclaration",
                  "scope": 4725,
                  "src": "897:47:23",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4686,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "897:7:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "hexValue": "30783131",
                    "id": 4687,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "940:4:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_17_by_1",
                      "typeString": "int_const 17"
                    },
                    "value": "0x11"
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "documentation": {
                    "id": 4689,
                    "nodeType": "StructuredDocumentation",
                    "src": "950:35:23",
                    "text": "@dev division or modulo by zero"
                  },
                  "id": 4692,
                  "mutability": "constant",
                  "name": "DIVISION_BY_ZERO",
                  "nameLocation": "1016:16:23",
                  "nodeType": "VariableDeclaration",
                  "scope": 4725,
                  "src": "990:49:23",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4690,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "990:7:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "hexValue": "30783132",
                    "id": 4691,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1035:4:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_18_by_1",
                      "typeString": "int_const 18"
                    },
                    "value": "0x12"
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "documentation": {
                    "id": 4693,
                    "nodeType": "StructuredDocumentation",
                    "src": "1045:30:23",
                    "text": "@dev enum conversion error"
                  },
                  "id": 4696,
                  "mutability": "constant",
                  "name": "ENUM_CONVERSION_ERROR",
                  "nameLocation": "1106:21:23",
                  "nodeType": "VariableDeclaration",
                  "scope": 4725,
                  "src": "1080:54:23",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4694,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1080:7:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "hexValue": "30783231",
                    "id": 4695,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1130:4:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_33_by_1",
                      "typeString": "int_const 33"
                    },
                    "value": "0x21"
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "documentation": {
                    "id": 4697,
                    "nodeType": "StructuredDocumentation",
                    "src": "1140:36:23",
                    "text": "@dev invalid encoding in storage"
                  },
                  "id": 4700,
                  "mutability": "constant",
                  "name": "STORAGE_ENCODING_ERROR",
                  "nameLocation": "1207:22:23",
                  "nodeType": "VariableDeclaration",
                  "scope": 4725,
                  "src": "1181:55:23",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4698,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1181:7:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "hexValue": "30783232",
                    "id": 4699,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1232:4:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_34_by_1",
                      "typeString": "int_const 34"
                    },
                    "value": "0x22"
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "documentation": {
                    "id": 4701,
                    "nodeType": "StructuredDocumentation",
                    "src": "1242:24:23",
                    "text": "@dev empty array pop"
                  },
                  "id": 4704,
                  "mutability": "constant",
                  "name": "EMPTY_ARRAY_POP",
                  "nameLocation": "1297:15:23",
                  "nodeType": "VariableDeclaration",
                  "scope": 4725,
                  "src": "1271:48:23",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4702,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1271:7:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "hexValue": "30783331",
                    "id": 4703,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1315:4:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_49_by_1",
                      "typeString": "int_const 49"
                    },
                    "value": "0x31"
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "documentation": {
                    "id": 4705,
                    "nodeType": "StructuredDocumentation",
                    "src": "1325:35:23",
                    "text": "@dev array out of bounds access"
                  },
                  "id": 4708,
                  "mutability": "constant",
                  "name": "ARRAY_OUT_OF_BOUNDS",
                  "nameLocation": "1391:19:23",
                  "nodeType": "VariableDeclaration",
                  "scope": 4725,
                  "src": "1365:52:23",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4706,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1365:7:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "hexValue": "30783332",
                    "id": 4707,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1413:4:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_50_by_1",
                      "typeString": "int_const 50"
                    },
                    "value": "0x32"
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "documentation": {
                    "id": 4709,
                    "nodeType": "StructuredDocumentation",
                    "src": "1423:65:23",
                    "text": "@dev resource error (too large allocation or too large array)"
                  },
                  "id": 4712,
                  "mutability": "constant",
                  "name": "RESOURCE_ERROR",
                  "nameLocation": "1519:14:23",
                  "nodeType": "VariableDeclaration",
                  "scope": 4725,
                  "src": "1493:47:23",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4710,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1493:7:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "hexValue": "30783431",
                    "id": 4711,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1536:4:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_65_by_1",
                      "typeString": "int_const 65"
                    },
                    "value": "0x41"
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "documentation": {
                    "id": 4713,
                    "nodeType": "StructuredDocumentation",
                    "src": "1546:42:23",
                    "text": "@dev calling invalid internal function"
                  },
                  "id": 4716,
                  "mutability": "constant",
                  "name": "INVALID_INTERNAL_FUNCTION",
                  "nameLocation": "1619:25:23",
                  "nodeType": "VariableDeclaration",
                  "scope": 4725,
                  "src": "1593:58:23",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4714,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1593:7:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "hexValue": "30783531",
                    "id": 4715,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1647:4:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_81_by_1",
                      "typeString": "int_const 81"
                    },
                    "value": "0x51"
                  },
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4723,
                    "nodeType": "Block",
                    "src": "1819:151:23",
                    "statements": [
                      {
                        "AST": {
                          "nativeSrc": "1854:110:23",
                          "nodeType": "YulBlock",
                          "src": "1854:110:23",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nativeSrc": "1875:4:23",
                                    "nodeType": "YulLiteral",
                                    "src": "1875:4:23",
                                    "type": "",
                                    "value": "0x00"
                                  },
                                  {
                                    "kind": "number",
                                    "nativeSrc": "1881:10:23",
                                    "nodeType": "YulLiteral",
                                    "src": "1881:10:23",
                                    "type": "",
                                    "value": "0x4e487b71"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nativeSrc": "1868:6:23",
                                  "nodeType": "YulIdentifier",
                                  "src": "1868:6:23"
                                },
                                "nativeSrc": "1868:24:23",
                                "nodeType": "YulFunctionCall",
                                "src": "1868:24:23"
                              },
                              "nativeSrc": "1868:24:23",
                              "nodeType": "YulExpressionStatement",
                              "src": "1868:24:23"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nativeSrc": "1912:4:23",
                                    "nodeType": "YulLiteral",
                                    "src": "1912:4:23",
                                    "type": "",
                                    "value": "0x20"
                                  },
                                  {
                                    "name": "code",
                                    "nativeSrc": "1918:4:23",
                                    "nodeType": "YulIdentifier",
                                    "src": "1918:4:23"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nativeSrc": "1905:6:23",
                                  "nodeType": "YulIdentifier",
                                  "src": "1905:6:23"
                                },
                                "nativeSrc": "1905:18:23",
                                "nodeType": "YulFunctionCall",
                                "src": "1905:18:23"
                              },
                              "nativeSrc": "1905:18:23",
                              "nodeType": "YulExpressionStatement",
                              "src": "1905:18:23"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nativeSrc": "1943:4:23",
                                    "nodeType": "YulLiteral",
                                    "src": "1943:4:23",
                                    "type": "",
                                    "value": "0x1c"
                                  },
                                  {
                                    "kind": "number",
                                    "nativeSrc": "1949:4:23",
                                    "nodeType": "YulLiteral",
                                    "src": "1949:4:23",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nativeSrc": "1936:6:23",
                                  "nodeType": "YulIdentifier",
                                  "src": "1936:6:23"
                                },
                                "nativeSrc": "1936:18:23",
                                "nodeType": "YulFunctionCall",
                                "src": "1936:18:23"
                              },
                              "nativeSrc": "1936:18:23",
                              "nodeType": "YulExpressionStatement",
                              "src": "1936:18:23"
                            }
                          ]
                        },
                        "evmVersion": "paris",
                        "externalReferences": [
                          {
                            "declaration": 4719,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1918:4:23",
                            "valueSize": 1
                          }
                        ],
                        "flags": [
                          "memory-safe"
                        ],
                        "id": 4722,
                        "nodeType": "InlineAssembly",
                        "src": "1829:135:23"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4717,
                    "nodeType": "StructuredDocumentation",
                    "src": "1658:113:23",
                    "text": "@dev Reverts with a panic code. Recommended to use with\n the internal constants with predefined codes."
                  },
                  "id": 4724,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "panic",
                  "nameLocation": "1785:5:23",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4720,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4719,
                        "mutability": "mutable",
                        "name": "code",
                        "nameLocation": "1799:4:23",
                        "nodeType": "VariableDeclaration",
                        "scope": 4724,
                        "src": "1791:12:23",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4718,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1791:7:23",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1790:14:23"
                  },
                  "returnParameters": {
                    "id": 4721,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1819:0:23"
                  },
                  "scope": 4725,
                  "src": "1776:194:23",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 4726,
              "src": "657:1315:23",
              "usedErrors": [],
              "usedEvents": []
            }
          ],
          "src": "99:1874:23"
        },
        "id": 23
      },
      "@openzeppelin/contracts/utils/SlotDerivation.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/utils/SlotDerivation.sol",
          "exportedSymbols": {
            "SlotDerivation": [
              4855
            ]
          },
          "id": 4856,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 4727,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".20"
              ],
              "nodeType": "PragmaDirective",
              "src": "199:24:24"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "canonicalName": "SlotDerivation",
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 4728,
                "nodeType": "StructuredDocumentation",
                "src": "225:1373:24",
                "text": " @dev Library for computing storage (and transient storage) locations from namespaces and deriving slots\n corresponding to standard patterns. The derivation method for array and mapping matches the storage layout used by\n the solidity language / compiler.\n See https://docs.soliditylang.org/en/v0.8.20/internals/layout_in_storage.html#mappings-and-dynamic-arrays[Solidity docs for mappings and dynamic arrays.].\n Example usage:\n ```solidity\n contract Example {\n     // Add the library methods\n     using StorageSlot for bytes32;\n     using SlotDerivation for bytes32;\n     // Declare a namespace\n     string private constant _NAMESPACE = \"<namespace>\"; // eg. OpenZeppelin.Slot\n     function setValueInNamespace(uint256 key, address newValue) internal {\n         _NAMESPACE.erc7201Slot().deriveMapping(key).getAddressSlot().value = newValue;\n     }\n     function getValueInNamespace(uint256 key) internal view returns (address) {\n         return _NAMESPACE.erc7201Slot().deriveMapping(key).getAddressSlot().value;\n     }\n }\n ```\n TIP: Consider using this library along with {StorageSlot}.\n NOTE: This library provides a way to manipulate storage locations in a non-standard way. Tooling for checking\n upgrade safety will ignore the slots accessed through this library.\n _Available since v5.1._"
              },
              "fullyImplemented": true,
              "id": 4855,
              "linearizedBaseContracts": [
                4855
              ],
              "name": "SlotDerivation",
              "nameLocation": "1607:14:24",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 4737,
                    "nodeType": "Block",
                    "src": "1790:194:24",
                    "statements": [
                      {
                        "AST": {
                          "nativeSrc": "1825:153:24",
                          "nodeType": "YulBlock",
                          "src": "1825:153:24",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nativeSrc": "1846:4:24",
                                    "nodeType": "YulLiteral",
                                    "src": "1846:4:24",
                                    "type": "",
                                    "value": "0x00"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "namespace",
                                                "nativeSrc": "1870:9:24",
                                                "nodeType": "YulIdentifier",
                                                "src": "1870:9:24"
                                              },
                                              {
                                                "kind": "number",
                                                "nativeSrc": "1881:4:24",
                                                "nodeType": "YulLiteral",
                                                "src": "1881:4:24",
                                                "type": "",
                                                "value": "0x20"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "add",
                                              "nativeSrc": "1866:3:24",
                                              "nodeType": "YulIdentifier",
                                              "src": "1866:3:24"
                                            },
                                            "nativeSrc": "1866:20:24",
                                            "nodeType": "YulFunctionCall",
                                            "src": "1866:20:24"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "name": "namespace",
                                                "nativeSrc": "1894:9:24",
                                                "nodeType": "YulIdentifier",
                                                "src": "1894:9:24"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "mload",
                                              "nativeSrc": "1888:5:24",
                                              "nodeType": "YulIdentifier",
                                              "src": "1888:5:24"
                                            },
                                            "nativeSrc": "1888:16:24",
                                            "nodeType": "YulFunctionCall",
                                            "src": "1888:16:24"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "keccak256",
                                          "nativeSrc": "1856:9:24",
                                          "nodeType": "YulIdentifier",
                                          "src": "1856:9:24"
                                        },
                                        "nativeSrc": "1856:49:24",
                                        "nodeType": "YulFunctionCall",
                                        "src": "1856:49:24"
                                      },
                                      {
                                        "kind": "number",
                                        "nativeSrc": "1907:1:24",
                                        "nodeType": "YulLiteral",
                                        "src": "1907:1:24",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nativeSrc": "1852:3:24",
                                      "nodeType": "YulIdentifier",
                                      "src": "1852:3:24"
                                    },
                                    "nativeSrc": "1852:57:24",
                                    "nodeType": "YulFunctionCall",
                                    "src": "1852:57:24"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nativeSrc": "1839:6:24",
                                  "nodeType": "YulIdentifier",
                                  "src": "1839:6:24"
                                },
                                "nativeSrc": "1839:71:24",
                                "nodeType": "YulFunctionCall",
                                "src": "1839:71:24"
                              },
                              "nativeSrc": "1839:71:24",
                              "nodeType": "YulExpressionStatement",
                              "src": "1839:71:24"
                            },
                            {
                              "nativeSrc": "1923:45:24",
                              "nodeType": "YulAssignment",
                              "src": "1923:45:24",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nativeSrc": "1945:4:24",
                                        "nodeType": "YulLiteral",
                                        "src": "1945:4:24",
                                        "type": "",
                                        "value": "0x00"
                                      },
                                      {
                                        "kind": "number",
                                        "nativeSrc": "1951:4:24",
                                        "nodeType": "YulLiteral",
                                        "src": "1951:4:24",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "keccak256",
                                      "nativeSrc": "1935:9:24",
                                      "nodeType": "YulIdentifier",
                                      "src": "1935:9:24"
                                    },
                                    "nativeSrc": "1935:21:24",
                                    "nodeType": "YulFunctionCall",
                                    "src": "1935:21:24"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nativeSrc": "1962:4:24",
                                        "nodeType": "YulLiteral",
                                        "src": "1962:4:24",
                                        "type": "",
                                        "value": "0xff"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "not",
                                      "nativeSrc": "1958:3:24",
                                      "nodeType": "YulIdentifier",
                                      "src": "1958:3:24"
                                    },
                                    "nativeSrc": "1958:9:24",
                                    "nodeType": "YulFunctionCall",
                                    "src": "1958:9:24"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nativeSrc": "1931:3:24",
                                  "nodeType": "YulIdentifier",
                                  "src": "1931:3:24"
                                },
                                "nativeSrc": "1931:37:24",
                                "nodeType": "YulFunctionCall",
                                "src": "1931:37:24"
                              },
                              "variableNames": [
                                {
                                  "name": "slot",
                                  "nativeSrc": "1923:4:24",
                                  "nodeType": "YulIdentifier",
                                  "src": "1923:4:24"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "paris",
                        "externalReferences": [
                          {
                            "declaration": 4731,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1870:9:24",
                            "valueSize": 1
                          },
                          {
                            "declaration": 4731,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1894:9:24",
                            "valueSize": 1
                          },
                          {
                            "declaration": 4734,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1923:4:24",
                            "valueSize": 1
                          }
                        ],
                        "flags": [
                          "memory-safe"
                        ],
                        "id": 4736,
                        "nodeType": "InlineAssembly",
                        "src": "1800:178:24"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4729,
                    "nodeType": "StructuredDocumentation",
                    "src": "1628:74:24",
                    "text": " @dev Derive an ERC-7201 slot from a string (namespace)."
                  },
                  "id": 4738,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "erc7201Slot",
                  "nameLocation": "1716:11:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4732,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4731,
                        "mutability": "mutable",
                        "name": "namespace",
                        "nameLocation": "1742:9:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 4738,
                        "src": "1728:23:24",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 4730,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "1728:6:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1727:25:24"
                  },
                  "returnParameters": {
                    "id": 4735,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4734,
                        "mutability": "mutable",
                        "name": "slot",
                        "nameLocation": "1784:4:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 4738,
                        "src": "1776:12:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4733,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "1776:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1775:14:24"
                  },
                  "scope": 4855,
                  "src": "1707:277:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4759,
                    "nodeType": "Block",
                    "src": "2176:86:24",
                    "statements": [
                      {
                        "id": 4758,
                        "nodeType": "UncheckedBlock",
                        "src": "2186:70:24",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 4755,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "arguments": [
                                      {
                                        "id": 4752,
                                        "name": "slot",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4741,
                                        "src": "2233:4:24",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      ],
                                      "id": 4751,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "2225:7:24",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_uint256_$",
                                        "typeString": "type(uint256)"
                                      },
                                      "typeName": {
                                        "id": 4750,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2225:7:24",
                                        "typeDescriptions": {}
                                      }
                                    },
                                    "id": 4753,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "2225:13:24",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "+",
                                  "rightExpression": {
                                    "id": 4754,
                                    "name": "pos",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4743,
                                    "src": "2241:3:24",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "2225:19:24",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 4749,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "2217:7:24",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_bytes32_$",
                                  "typeString": "type(bytes32)"
                                },
                                "typeName": {
                                  "id": 4748,
                                  "name": "bytes32",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "2217:7:24",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 4756,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2217:28:24",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "functionReturnParameters": 4747,
                            "id": 4757,
                            "nodeType": "Return",
                            "src": "2210:35:24"
                          }
                        ]
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4739,
                    "nodeType": "StructuredDocumentation",
                    "src": "1990:99:24",
                    "text": " @dev Add an offset to a slot to get the n-th element of a structure or an array."
                  },
                  "id": 4760,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "offset",
                  "nameLocation": "2103:6:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4744,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4741,
                        "mutability": "mutable",
                        "name": "slot",
                        "nameLocation": "2118:4:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 4760,
                        "src": "2110:12:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4740,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2110:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4743,
                        "mutability": "mutable",
                        "name": "pos",
                        "nameLocation": "2132:3:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 4760,
                        "src": "2124:11:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4742,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2124:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2109:27:24"
                  },
                  "returnParameters": {
                    "id": 4747,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4746,
                        "mutability": "mutable",
                        "name": "result",
                        "nameLocation": "2168:6:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 4760,
                        "src": "2160:14:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4745,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2160:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2159:16:24"
                  },
                  "scope": 4855,
                  "src": "2094:168:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4769,
                    "nodeType": "Block",
                    "src": "2465:127:24",
                    "statements": [
                      {
                        "AST": {
                          "nativeSrc": "2500:86:24",
                          "nodeType": "YulBlock",
                          "src": "2500:86:24",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nativeSrc": "2521:4:24",
                                    "nodeType": "YulLiteral",
                                    "src": "2521:4:24",
                                    "type": "",
                                    "value": "0x00"
                                  },
                                  {
                                    "name": "slot",
                                    "nativeSrc": "2527:4:24",
                                    "nodeType": "YulIdentifier",
                                    "src": "2527:4:24"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nativeSrc": "2514:6:24",
                                  "nodeType": "YulIdentifier",
                                  "src": "2514:6:24"
                                },
                                "nativeSrc": "2514:18:24",
                                "nodeType": "YulFunctionCall",
                                "src": "2514:18:24"
                              },
                              "nativeSrc": "2514:18:24",
                              "nodeType": "YulExpressionStatement",
                              "src": "2514:18:24"
                            },
                            {
                              "nativeSrc": "2545:31:24",
                              "nodeType": "YulAssignment",
                              "src": "2545:31:24",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nativeSrc": "2565:4:24",
                                    "nodeType": "YulLiteral",
                                    "src": "2565:4:24",
                                    "type": "",
                                    "value": "0x00"
                                  },
                                  {
                                    "kind": "number",
                                    "nativeSrc": "2571:4:24",
                                    "nodeType": "YulLiteral",
                                    "src": "2571:4:24",
                                    "type": "",
                                    "value": "0x20"
                                  }
                                ],
                                "functionName": {
                                  "name": "keccak256",
                                  "nativeSrc": "2555:9:24",
                                  "nodeType": "YulIdentifier",
                                  "src": "2555:9:24"
                                },
                                "nativeSrc": "2555:21:24",
                                "nodeType": "YulFunctionCall",
                                "src": "2555:21:24"
                              },
                              "variableNames": [
                                {
                                  "name": "result",
                                  "nativeSrc": "2545:6:24",
                                  "nodeType": "YulIdentifier",
                                  "src": "2545:6:24"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "paris",
                        "externalReferences": [
                          {
                            "declaration": 4766,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "2545:6:24",
                            "valueSize": 1
                          },
                          {
                            "declaration": 4763,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "2527:4:24",
                            "valueSize": 1
                          }
                        ],
                        "flags": [
                          "memory-safe"
                        ],
                        "id": 4768,
                        "nodeType": "InlineAssembly",
                        "src": "2475:111:24"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4761,
                    "nodeType": "StructuredDocumentation",
                    "src": "2268:118:24",
                    "text": " @dev Derive the location of the first element in an array from the slot where the length is stored."
                  },
                  "id": 4770,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "deriveArray",
                  "nameLocation": "2400:11:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4764,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4763,
                        "mutability": "mutable",
                        "name": "slot",
                        "nameLocation": "2420:4:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 4770,
                        "src": "2412:12:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4762,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2412:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2411:14:24"
                  },
                  "returnParameters": {
                    "id": 4767,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4766,
                        "mutability": "mutable",
                        "name": "result",
                        "nameLocation": "2457:6:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 4770,
                        "src": "2449:14:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4765,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2449:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2448:16:24"
                  },
                  "scope": 4855,
                  "src": "2391:201:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4781,
                    "nodeType": "Block",
                    "src": "2770:179:24",
                    "statements": [
                      {
                        "AST": {
                          "nativeSrc": "2805:138:24",
                          "nodeType": "YulBlock",
                          "src": "2805:138:24",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nativeSrc": "2826:4:24",
                                    "nodeType": "YulLiteral",
                                    "src": "2826:4:24",
                                    "type": "",
                                    "value": "0x00"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "key",
                                        "nativeSrc": "2836:3:24",
                                        "nodeType": "YulIdentifier",
                                        "src": "2836:3:24"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nativeSrc": "2845:2:24",
                                            "nodeType": "YulLiteral",
                                            "src": "2845:2:24",
                                            "type": "",
                                            "value": "96"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nativeSrc": "2853:1:24",
                                                "nodeType": "YulLiteral",
                                                "src": "2853:1:24",
                                                "type": "",
                                                "value": "0"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "not",
                                              "nativeSrc": "2849:3:24",
                                              "nodeType": "YulIdentifier",
                                              "src": "2849:3:24"
                                            },
                                            "nativeSrc": "2849:6:24",
                                            "nodeType": "YulFunctionCall",
                                            "src": "2849:6:24"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "shr",
                                          "nativeSrc": "2841:3:24",
                                          "nodeType": "YulIdentifier",
                                          "src": "2841:3:24"
                                        },
                                        "nativeSrc": "2841:15:24",
                                        "nodeType": "YulFunctionCall",
                                        "src": "2841:15:24"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nativeSrc": "2832:3:24",
                                      "nodeType": "YulIdentifier",
                                      "src": "2832:3:24"
                                    },
                                    "nativeSrc": "2832:25:24",
                                    "nodeType": "YulFunctionCall",
                                    "src": "2832:25:24"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nativeSrc": "2819:6:24",
                                  "nodeType": "YulIdentifier",
                                  "src": "2819:6:24"
                                },
                                "nativeSrc": "2819:39:24",
                                "nodeType": "YulFunctionCall",
                                "src": "2819:39:24"
                              },
                              "nativeSrc": "2819:39:24",
                              "nodeType": "YulExpressionStatement",
                              "src": "2819:39:24"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nativeSrc": "2878:4:24",
                                    "nodeType": "YulLiteral",
                                    "src": "2878:4:24",
                                    "type": "",
                                    "value": "0x20"
                                  },
                                  {
                                    "name": "slot",
                                    "nativeSrc": "2884:4:24",
                                    "nodeType": "YulIdentifier",
                                    "src": "2884:4:24"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nativeSrc": "2871:6:24",
                                  "nodeType": "YulIdentifier",
                                  "src": "2871:6:24"
                                },
                                "nativeSrc": "2871:18:24",
                                "nodeType": "YulFunctionCall",
                                "src": "2871:18:24"
                              },
                              "nativeSrc": "2871:18:24",
                              "nodeType": "YulExpressionStatement",
                              "src": "2871:18:24"
                            },
                            {
                              "nativeSrc": "2902:31:24",
                              "nodeType": "YulAssignment",
                              "src": "2902:31:24",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nativeSrc": "2922:4:24",
                                    "nodeType": "YulLiteral",
                                    "src": "2922:4:24",
                                    "type": "",
                                    "value": "0x00"
                                  },
                                  {
                                    "kind": "number",
                                    "nativeSrc": "2928:4:24",
                                    "nodeType": "YulLiteral",
                                    "src": "2928:4:24",
                                    "type": "",
                                    "value": "0x40"
                                  }
                                ],
                                "functionName": {
                                  "name": "keccak256",
                                  "nativeSrc": "2912:9:24",
                                  "nodeType": "YulIdentifier",
                                  "src": "2912:9:24"
                                },
                                "nativeSrc": "2912:21:24",
                                "nodeType": "YulFunctionCall",
                                "src": "2912:21:24"
                              },
                              "variableNames": [
                                {
                                  "name": "result",
                                  "nativeSrc": "2902:6:24",
                                  "nodeType": "YulIdentifier",
                                  "src": "2902:6:24"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "paris",
                        "externalReferences": [
                          {
                            "declaration": 4775,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "2836:3:24",
                            "valueSize": 1
                          },
                          {
                            "declaration": 4778,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "2902:6:24",
                            "valueSize": 1
                          },
                          {
                            "declaration": 4773,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "2884:4:24",
                            "valueSize": 1
                          }
                        ],
                        "flags": [
                          "memory-safe"
                        ],
                        "id": 4780,
                        "nodeType": "InlineAssembly",
                        "src": "2780:163:24"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4771,
                    "nodeType": "StructuredDocumentation",
                    "src": "2598:78:24",
                    "text": " @dev Derive the location of a mapping element from the key."
                  },
                  "id": 4782,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "deriveMapping",
                  "nameLocation": "2690:13:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4776,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4773,
                        "mutability": "mutable",
                        "name": "slot",
                        "nameLocation": "2712:4:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 4782,
                        "src": "2704:12:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4772,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2704:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4775,
                        "mutability": "mutable",
                        "name": "key",
                        "nameLocation": "2726:3:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 4782,
                        "src": "2718:11:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 4774,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2718:7:24",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2703:27:24"
                  },
                  "returnParameters": {
                    "id": 4779,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4778,
                        "mutability": "mutable",
                        "name": "result",
                        "nameLocation": "2762:6:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 4782,
                        "src": "2754:14:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4777,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2754:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2753:16:24"
                  },
                  "scope": 4855,
                  "src": "2681:268:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4793,
                    "nodeType": "Block",
                    "src": "3124:173:24",
                    "statements": [
                      {
                        "AST": {
                          "nativeSrc": "3159:132:24",
                          "nodeType": "YulBlock",
                          "src": "3159:132:24",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nativeSrc": "3180:4:24",
                                    "nodeType": "YulLiteral",
                                    "src": "3180:4:24",
                                    "type": "",
                                    "value": "0x00"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "key",
                                            "nativeSrc": "3200:3:24",
                                            "nodeType": "YulIdentifier",
                                            "src": "3200:3:24"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nativeSrc": "3193:6:24",
                                          "nodeType": "YulIdentifier",
                                          "src": "3193:6:24"
                                        },
                                        "nativeSrc": "3193:11:24",
                                        "nodeType": "YulFunctionCall",
                                        "src": "3193:11:24"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "iszero",
                                      "nativeSrc": "3186:6:24",
                                      "nodeType": "YulIdentifier",
                                      "src": "3186:6:24"
                                    },
                                    "nativeSrc": "3186:19:24",
                                    "nodeType": "YulFunctionCall",
                                    "src": "3186:19:24"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nativeSrc": "3173:6:24",
                                  "nodeType": "YulIdentifier",
                                  "src": "3173:6:24"
                                },
                                "nativeSrc": "3173:33:24",
                                "nodeType": "YulFunctionCall",
                                "src": "3173:33:24"
                              },
                              "nativeSrc": "3173:33:24",
                              "nodeType": "YulExpressionStatement",
                              "src": "3173:33:24"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nativeSrc": "3226:4:24",
                                    "nodeType": "YulLiteral",
                                    "src": "3226:4:24",
                                    "type": "",
                                    "value": "0x20"
                                  },
                                  {
                                    "name": "slot",
                                    "nativeSrc": "3232:4:24",
                                    "nodeType": "YulIdentifier",
                                    "src": "3232:4:24"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nativeSrc": "3219:6:24",
                                  "nodeType": "YulIdentifier",
                                  "src": "3219:6:24"
                                },
                                "nativeSrc": "3219:18:24",
                                "nodeType": "YulFunctionCall",
                                "src": "3219:18:24"
                              },
                              "nativeSrc": "3219:18:24",
                              "nodeType": "YulExpressionStatement",
                              "src": "3219:18:24"
                            },
                            {
                              "nativeSrc": "3250:31:24",
                              "nodeType": "YulAssignment",
                              "src": "3250:31:24",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nativeSrc": "3270:4:24",
                                    "nodeType": "YulLiteral",
                                    "src": "3270:4:24",
                                    "type": "",
                                    "value": "0x00"
                                  },
                                  {
                                    "kind": "number",
                                    "nativeSrc": "3276:4:24",
                                    "nodeType": "YulLiteral",
                                    "src": "3276:4:24",
                                    "type": "",
                                    "value": "0x40"
                                  }
                                ],
                                "functionName": {
                                  "name": "keccak256",
                                  "nativeSrc": "3260:9:24",
                                  "nodeType": "YulIdentifier",
                                  "src": "3260:9:24"
                                },
                                "nativeSrc": "3260:21:24",
                                "nodeType": "YulFunctionCall",
                                "src": "3260:21:24"
                              },
                              "variableNames": [
                                {
                                  "name": "result",
                                  "nativeSrc": "3250:6:24",
                                  "nodeType": "YulIdentifier",
                                  "src": "3250:6:24"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "paris",
                        "externalReferences": [
                          {
                            "declaration": 4787,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "3200:3:24",
                            "valueSize": 1
                          },
                          {
                            "declaration": 4790,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "3250:6:24",
                            "valueSize": 1
                          },
                          {
                            "declaration": 4785,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "3232:4:24",
                            "valueSize": 1
                          }
                        ],
                        "flags": [
                          "memory-safe"
                        ],
                        "id": 4792,
                        "nodeType": "InlineAssembly",
                        "src": "3134:157:24"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4783,
                    "nodeType": "StructuredDocumentation",
                    "src": "2955:78:24",
                    "text": " @dev Derive the location of a mapping element from the key."
                  },
                  "id": 4794,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "deriveMapping",
                  "nameLocation": "3047:13:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4788,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4785,
                        "mutability": "mutable",
                        "name": "slot",
                        "nameLocation": "3069:4:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 4794,
                        "src": "3061:12:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4784,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "3061:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4787,
                        "mutability": "mutable",
                        "name": "key",
                        "nameLocation": "3080:3:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 4794,
                        "src": "3075:8:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 4786,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "3075:4:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3060:24:24"
                  },
                  "returnParameters": {
                    "id": 4791,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4790,
                        "mutability": "mutable",
                        "name": "result",
                        "nameLocation": "3116:6:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 4794,
                        "src": "3108:14:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4789,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "3108:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3107:16:24"
                  },
                  "scope": 4855,
                  "src": "3038:259:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4805,
                    "nodeType": "Block",
                    "src": "3475:157:24",
                    "statements": [
                      {
                        "AST": {
                          "nativeSrc": "3510:116:24",
                          "nodeType": "YulBlock",
                          "src": "3510:116:24",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nativeSrc": "3531:4:24",
                                    "nodeType": "YulLiteral",
                                    "src": "3531:4:24",
                                    "type": "",
                                    "value": "0x00"
                                  },
                                  {
                                    "name": "key",
                                    "nativeSrc": "3537:3:24",
                                    "nodeType": "YulIdentifier",
                                    "src": "3537:3:24"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nativeSrc": "3524:6:24",
                                  "nodeType": "YulIdentifier",
                                  "src": "3524:6:24"
                                },
                                "nativeSrc": "3524:17:24",
                                "nodeType": "YulFunctionCall",
                                "src": "3524:17:24"
                              },
                              "nativeSrc": "3524:17:24",
                              "nodeType": "YulExpressionStatement",
                              "src": "3524:17:24"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nativeSrc": "3561:4:24",
                                    "nodeType": "YulLiteral",
                                    "src": "3561:4:24",
                                    "type": "",
                                    "value": "0x20"
                                  },
                                  {
                                    "name": "slot",
                                    "nativeSrc": "3567:4:24",
                                    "nodeType": "YulIdentifier",
                                    "src": "3567:4:24"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nativeSrc": "3554:6:24",
                                  "nodeType": "YulIdentifier",
                                  "src": "3554:6:24"
                                },
                                "nativeSrc": "3554:18:24",
                                "nodeType": "YulFunctionCall",
                                "src": "3554:18:24"
                              },
                              "nativeSrc": "3554:18:24",
                              "nodeType": "YulExpressionStatement",
                              "src": "3554:18:24"
                            },
                            {
                              "nativeSrc": "3585:31:24",
                              "nodeType": "YulAssignment",
                              "src": "3585:31:24",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nativeSrc": "3605:4:24",
                                    "nodeType": "YulLiteral",
                                    "src": "3605:4:24",
                                    "type": "",
                                    "value": "0x00"
                                  },
                                  {
                                    "kind": "number",
                                    "nativeSrc": "3611:4:24",
                                    "nodeType": "YulLiteral",
                                    "src": "3611:4:24",
                                    "type": "",
                                    "value": "0x40"
                                  }
                                ],
                                "functionName": {
                                  "name": "keccak256",
                                  "nativeSrc": "3595:9:24",
                                  "nodeType": "YulIdentifier",
                                  "src": "3595:9:24"
                                },
                                "nativeSrc": "3595:21:24",
                                "nodeType": "YulFunctionCall",
                                "src": "3595:21:24"
                              },
                              "variableNames": [
                                {
                                  "name": "result",
                                  "nativeSrc": "3585:6:24",
                                  "nodeType": "YulIdentifier",
                                  "src": "3585:6:24"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "paris",
                        "externalReferences": [
                          {
                            "declaration": 4799,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "3537:3:24",
                            "valueSize": 1
                          },
                          {
                            "declaration": 4802,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "3585:6:24",
                            "valueSize": 1
                          },
                          {
                            "declaration": 4797,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "3567:4:24",
                            "valueSize": 1
                          }
                        ],
                        "flags": [
                          "memory-safe"
                        ],
                        "id": 4804,
                        "nodeType": "InlineAssembly",
                        "src": "3485:141:24"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4795,
                    "nodeType": "StructuredDocumentation",
                    "src": "3303:78:24",
                    "text": " @dev Derive the location of a mapping element from the key."
                  },
                  "id": 4806,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "deriveMapping",
                  "nameLocation": "3395:13:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4800,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4797,
                        "mutability": "mutable",
                        "name": "slot",
                        "nameLocation": "3417:4:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 4806,
                        "src": "3409:12:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4796,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "3409:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4799,
                        "mutability": "mutable",
                        "name": "key",
                        "nameLocation": "3431:3:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 4806,
                        "src": "3423:11:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4798,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "3423:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3408:27:24"
                  },
                  "returnParameters": {
                    "id": 4803,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4802,
                        "mutability": "mutable",
                        "name": "result",
                        "nameLocation": "3467:6:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 4806,
                        "src": "3459:14:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4801,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "3459:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3458:16:24"
                  },
                  "scope": 4855,
                  "src": "3386:246:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4817,
                    "nodeType": "Block",
                    "src": "3810:157:24",
                    "statements": [
                      {
                        "AST": {
                          "nativeSrc": "3845:116:24",
                          "nodeType": "YulBlock",
                          "src": "3845:116:24",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nativeSrc": "3866:4:24",
                                    "nodeType": "YulLiteral",
                                    "src": "3866:4:24",
                                    "type": "",
                                    "value": "0x00"
                                  },
                                  {
                                    "name": "key",
                                    "nativeSrc": "3872:3:24",
                                    "nodeType": "YulIdentifier",
                                    "src": "3872:3:24"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nativeSrc": "3859:6:24",
                                  "nodeType": "YulIdentifier",
                                  "src": "3859:6:24"
                                },
                                "nativeSrc": "3859:17:24",
                                "nodeType": "YulFunctionCall",
                                "src": "3859:17:24"
                              },
                              "nativeSrc": "3859:17:24",
                              "nodeType": "YulExpressionStatement",
                              "src": "3859:17:24"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nativeSrc": "3896:4:24",
                                    "nodeType": "YulLiteral",
                                    "src": "3896:4:24",
                                    "type": "",
                                    "value": "0x20"
                                  },
                                  {
                                    "name": "slot",
                                    "nativeSrc": "3902:4:24",
                                    "nodeType": "YulIdentifier",
                                    "src": "3902:4:24"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nativeSrc": "3889:6:24",
                                  "nodeType": "YulIdentifier",
                                  "src": "3889:6:24"
                                },
                                "nativeSrc": "3889:18:24",
                                "nodeType": "YulFunctionCall",
                                "src": "3889:18:24"
                              },
                              "nativeSrc": "3889:18:24",
                              "nodeType": "YulExpressionStatement",
                              "src": "3889:18:24"
                            },
                            {
                              "nativeSrc": "3920:31:24",
                              "nodeType": "YulAssignment",
                              "src": "3920:31:24",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nativeSrc": "3940:4:24",
                                    "nodeType": "YulLiteral",
                                    "src": "3940:4:24",
                                    "type": "",
                                    "value": "0x00"
                                  },
                                  {
                                    "kind": "number",
                                    "nativeSrc": "3946:4:24",
                                    "nodeType": "YulLiteral",
                                    "src": "3946:4:24",
                                    "type": "",
                                    "value": "0x40"
                                  }
                                ],
                                "functionName": {
                                  "name": "keccak256",
                                  "nativeSrc": "3930:9:24",
                                  "nodeType": "YulIdentifier",
                                  "src": "3930:9:24"
                                },
                                "nativeSrc": "3930:21:24",
                                "nodeType": "YulFunctionCall",
                                "src": "3930:21:24"
                              },
                              "variableNames": [
                                {
                                  "name": "result",
                                  "nativeSrc": "3920:6:24",
                                  "nodeType": "YulIdentifier",
                                  "src": "3920:6:24"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "paris",
                        "externalReferences": [
                          {
                            "declaration": 4811,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "3872:3:24",
                            "valueSize": 1
                          },
                          {
                            "declaration": 4814,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "3920:6:24",
                            "valueSize": 1
                          },
                          {
                            "declaration": 4809,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "3902:4:24",
                            "valueSize": 1
                          }
                        ],
                        "flags": [
                          "memory-safe"
                        ],
                        "id": 4816,
                        "nodeType": "InlineAssembly",
                        "src": "3820:141:24"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4807,
                    "nodeType": "StructuredDocumentation",
                    "src": "3638:78:24",
                    "text": " @dev Derive the location of a mapping element from the key."
                  },
                  "id": 4818,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "deriveMapping",
                  "nameLocation": "3730:13:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4812,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4809,
                        "mutability": "mutable",
                        "name": "slot",
                        "nameLocation": "3752:4:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 4818,
                        "src": "3744:12:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4808,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "3744:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4811,
                        "mutability": "mutable",
                        "name": "key",
                        "nameLocation": "3766:3:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 4818,
                        "src": "3758:11:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4810,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3758:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3743:27:24"
                  },
                  "returnParameters": {
                    "id": 4815,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4814,
                        "mutability": "mutable",
                        "name": "result",
                        "nameLocation": "3802:6:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 4818,
                        "src": "3794:14:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4813,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "3794:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3793:16:24"
                  },
                  "scope": 4855,
                  "src": "3721:246:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4829,
                    "nodeType": "Block",
                    "src": "4144:157:24",
                    "statements": [
                      {
                        "AST": {
                          "nativeSrc": "4179:116:24",
                          "nodeType": "YulBlock",
                          "src": "4179:116:24",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nativeSrc": "4200:4:24",
                                    "nodeType": "YulLiteral",
                                    "src": "4200:4:24",
                                    "type": "",
                                    "value": "0x00"
                                  },
                                  {
                                    "name": "key",
                                    "nativeSrc": "4206:3:24",
                                    "nodeType": "YulIdentifier",
                                    "src": "4206:3:24"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nativeSrc": "4193:6:24",
                                  "nodeType": "YulIdentifier",
                                  "src": "4193:6:24"
                                },
                                "nativeSrc": "4193:17:24",
                                "nodeType": "YulFunctionCall",
                                "src": "4193:17:24"
                              },
                              "nativeSrc": "4193:17:24",
                              "nodeType": "YulExpressionStatement",
                              "src": "4193:17:24"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nativeSrc": "4230:4:24",
                                    "nodeType": "YulLiteral",
                                    "src": "4230:4:24",
                                    "type": "",
                                    "value": "0x20"
                                  },
                                  {
                                    "name": "slot",
                                    "nativeSrc": "4236:4:24",
                                    "nodeType": "YulIdentifier",
                                    "src": "4236:4:24"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nativeSrc": "4223:6:24",
                                  "nodeType": "YulIdentifier",
                                  "src": "4223:6:24"
                                },
                                "nativeSrc": "4223:18:24",
                                "nodeType": "YulFunctionCall",
                                "src": "4223:18:24"
                              },
                              "nativeSrc": "4223:18:24",
                              "nodeType": "YulExpressionStatement",
                              "src": "4223:18:24"
                            },
                            {
                              "nativeSrc": "4254:31:24",
                              "nodeType": "YulAssignment",
                              "src": "4254:31:24",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nativeSrc": "4274:4:24",
                                    "nodeType": "YulLiteral",
                                    "src": "4274:4:24",
                                    "type": "",
                                    "value": "0x00"
                                  },
                                  {
                                    "kind": "number",
                                    "nativeSrc": "4280:4:24",
                                    "nodeType": "YulLiteral",
                                    "src": "4280:4:24",
                                    "type": "",
                                    "value": "0x40"
                                  }
                                ],
                                "functionName": {
                                  "name": "keccak256",
                                  "nativeSrc": "4264:9:24",
                                  "nodeType": "YulIdentifier",
                                  "src": "4264:9:24"
                                },
                                "nativeSrc": "4264:21:24",
                                "nodeType": "YulFunctionCall",
                                "src": "4264:21:24"
                              },
                              "variableNames": [
                                {
                                  "name": "result",
                                  "nativeSrc": "4254:6:24",
                                  "nodeType": "YulIdentifier",
                                  "src": "4254:6:24"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "paris",
                        "externalReferences": [
                          {
                            "declaration": 4823,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "4206:3:24",
                            "valueSize": 1
                          },
                          {
                            "declaration": 4826,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "4254:6:24",
                            "valueSize": 1
                          },
                          {
                            "declaration": 4821,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "4236:4:24",
                            "valueSize": 1
                          }
                        ],
                        "flags": [
                          "memory-safe"
                        ],
                        "id": 4828,
                        "nodeType": "InlineAssembly",
                        "src": "4154:141:24"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4819,
                    "nodeType": "StructuredDocumentation",
                    "src": "3973:78:24",
                    "text": " @dev Derive the location of a mapping element from the key."
                  },
                  "id": 4830,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "deriveMapping",
                  "nameLocation": "4065:13:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4824,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4821,
                        "mutability": "mutable",
                        "name": "slot",
                        "nameLocation": "4087:4:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 4830,
                        "src": "4079:12:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4820,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "4079:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4823,
                        "mutability": "mutable",
                        "name": "key",
                        "nameLocation": "4100:3:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 4830,
                        "src": "4093:10:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 4822,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4093:6:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4078:26:24"
                  },
                  "returnParameters": {
                    "id": 4827,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4826,
                        "mutability": "mutable",
                        "name": "result",
                        "nameLocation": "4136:6:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 4830,
                        "src": "4128:14:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4825,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "4128:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4127:16:24"
                  },
                  "scope": 4855,
                  "src": "4056:245:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4841,
                    "nodeType": "Block",
                    "src": "4485:326:24",
                    "statements": [
                      {
                        "AST": {
                          "nativeSrc": "4520:285:24",
                          "nodeType": "YulBlock",
                          "src": "4520:285:24",
                          "statements": [
                            {
                              "nativeSrc": "4534:24:24",
                              "nodeType": "YulVariableDeclaration",
                              "src": "4534:24:24",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "key",
                                    "nativeSrc": "4554:3:24",
                                    "nodeType": "YulIdentifier",
                                    "src": "4554:3:24"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nativeSrc": "4548:5:24",
                                  "nodeType": "YulIdentifier",
                                  "src": "4548:5:24"
                                },
                                "nativeSrc": "4548:10:24",
                                "nodeType": "YulFunctionCall",
                                "src": "4548:10:24"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nativeSrc": "4538:6:24",
                                  "nodeType": "YulTypedName",
                                  "src": "4538:6:24",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nativeSrc": "4571:27:24",
                              "nodeType": "YulVariableDeclaration",
                              "src": "4571:27:24",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "key",
                                    "nativeSrc": "4588:3:24",
                                    "nodeType": "YulIdentifier",
                                    "src": "4588:3:24"
                                  },
                                  {
                                    "kind": "number",
                                    "nativeSrc": "4593:4:24",
                                    "nodeType": "YulLiteral",
                                    "src": "4593:4:24",
                                    "type": "",
                                    "value": "0x20"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nativeSrc": "4584:3:24",
                                  "nodeType": "YulIdentifier",
                                  "src": "4584:3:24"
                                },
                                "nativeSrc": "4584:14:24",
                                "nodeType": "YulFunctionCall",
                                "src": "4584:14:24"
                              },
                              "variables": [
                                {
                                  "name": "begin",
                                  "nativeSrc": "4575:5:24",
                                  "nodeType": "YulTypedName",
                                  "src": "4575:5:24",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nativeSrc": "4611:29:24",
                              "nodeType": "YulVariableDeclaration",
                              "src": "4611:29:24",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "begin",
                                    "nativeSrc": "4626:5:24",
                                    "nodeType": "YulIdentifier",
                                    "src": "4626:5:24"
                                  },
                                  {
                                    "name": "length",
                                    "nativeSrc": "4633:6:24",
                                    "nodeType": "YulIdentifier",
                                    "src": "4633:6:24"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nativeSrc": "4622:3:24",
                                  "nodeType": "YulIdentifier",
                                  "src": "4622:3:24"
                                },
                                "nativeSrc": "4622:18:24",
                                "nodeType": "YulFunctionCall",
                                "src": "4622:18:24"
                              },
                              "variables": [
                                {
                                  "name": "end",
                                  "nativeSrc": "4615:3:24",
                                  "nodeType": "YulTypedName",
                                  "src": "4615:3:24",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nativeSrc": "4653:23:24",
                              "nodeType": "YulVariableDeclaration",
                              "src": "4653:23:24",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "end",
                                    "nativeSrc": "4672:3:24",
                                    "nodeType": "YulIdentifier",
                                    "src": "4672:3:24"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nativeSrc": "4666:5:24",
                                  "nodeType": "YulIdentifier",
                                  "src": "4666:5:24"
                                },
                                "nativeSrc": "4666:10:24",
                                "nodeType": "YulFunctionCall",
                                "src": "4666:10:24"
                              },
                              "variables": [
                                {
                                  "name": "cache",
                                  "nativeSrc": "4657:5:24",
                                  "nodeType": "YulTypedName",
                                  "src": "4657:5:24",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "end",
                                    "nativeSrc": "4696:3:24",
                                    "nodeType": "YulIdentifier",
                                    "src": "4696:3:24"
                                  },
                                  {
                                    "name": "slot",
                                    "nativeSrc": "4701:4:24",
                                    "nodeType": "YulIdentifier",
                                    "src": "4701:4:24"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nativeSrc": "4689:6:24",
                                  "nodeType": "YulIdentifier",
                                  "src": "4689:6:24"
                                },
                                "nativeSrc": "4689:17:24",
                                "nodeType": "YulFunctionCall",
                                "src": "4689:17:24"
                              },
                              "nativeSrc": "4689:17:24",
                              "nodeType": "YulExpressionStatement",
                              "src": "4689:17:24"
                            },
                            {
                              "nativeSrc": "4719:45:24",
                              "nodeType": "YulAssignment",
                              "src": "4719:45:24",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "begin",
                                    "nativeSrc": "4739:5:24",
                                    "nodeType": "YulIdentifier",
                                    "src": "4739:5:24"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "length",
                                        "nativeSrc": "4750:6:24",
                                        "nodeType": "YulIdentifier",
                                        "src": "4750:6:24"
                                      },
                                      {
                                        "kind": "number",
                                        "nativeSrc": "4758:4:24",
                                        "nodeType": "YulLiteral",
                                        "src": "4758:4:24",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nativeSrc": "4746:3:24",
                                      "nodeType": "YulIdentifier",
                                      "src": "4746:3:24"
                                    },
                                    "nativeSrc": "4746:17:24",
                                    "nodeType": "YulFunctionCall",
                                    "src": "4746:17:24"
                                  }
                                ],
                                "functionName": {
                                  "name": "keccak256",
                                  "nativeSrc": "4729:9:24",
                                  "nodeType": "YulIdentifier",
                                  "src": "4729:9:24"
                                },
                                "nativeSrc": "4729:35:24",
                                "nodeType": "YulFunctionCall",
                                "src": "4729:35:24"
                              },
                              "variableNames": [
                                {
                                  "name": "result",
                                  "nativeSrc": "4719:6:24",
                                  "nodeType": "YulIdentifier",
                                  "src": "4719:6:24"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "end",
                                    "nativeSrc": "4784:3:24",
                                    "nodeType": "YulIdentifier",
                                    "src": "4784:3:24"
                                  },
                                  {
                                    "name": "cache",
                                    "nativeSrc": "4789:5:24",
                                    "nodeType": "YulIdentifier",
                                    "src": "4789:5:24"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nativeSrc": "4777:6:24",
                                  "nodeType": "YulIdentifier",
                                  "src": "4777:6:24"
                                },
                                "nativeSrc": "4777:18:24",
                                "nodeType": "YulFunctionCall",
                                "src": "4777:18:24"
                              },
                              "nativeSrc": "4777:18:24",
                              "nodeType": "YulExpressionStatement",
                              "src": "4777:18:24"
                            }
                          ]
                        },
                        "evmVersion": "paris",
                        "externalReferences": [
                          {
                            "declaration": 4835,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "4554:3:24",
                            "valueSize": 1
                          },
                          {
                            "declaration": 4835,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "4588:3:24",
                            "valueSize": 1
                          },
                          {
                            "declaration": 4838,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "4719:6:24",
                            "valueSize": 1
                          },
                          {
                            "declaration": 4833,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "4701:4:24",
                            "valueSize": 1
                          }
                        ],
                        "flags": [
                          "memory-safe"
                        ],
                        "id": 4840,
                        "nodeType": "InlineAssembly",
                        "src": "4495:310:24"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4831,
                    "nodeType": "StructuredDocumentation",
                    "src": "4307:78:24",
                    "text": " @dev Derive the location of a mapping element from the key."
                  },
                  "id": 4842,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "deriveMapping",
                  "nameLocation": "4399:13:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4836,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4833,
                        "mutability": "mutable",
                        "name": "slot",
                        "nameLocation": "4421:4:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 4842,
                        "src": "4413:12:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4832,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "4413:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4835,
                        "mutability": "mutable",
                        "name": "key",
                        "nameLocation": "4441:3:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 4842,
                        "src": "4427:17:24",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 4834,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "4427:6:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4412:33:24"
                  },
                  "returnParameters": {
                    "id": 4839,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4838,
                        "mutability": "mutable",
                        "name": "result",
                        "nameLocation": "4477:6:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 4842,
                        "src": "4469:14:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4837,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "4469:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4468:16:24"
                  },
                  "scope": 4855,
                  "src": "4390:421:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4853,
                    "nodeType": "Block",
                    "src": "4994:326:24",
                    "statements": [
                      {
                        "AST": {
                          "nativeSrc": "5029:285:24",
                          "nodeType": "YulBlock",
                          "src": "5029:285:24",
                          "statements": [
                            {
                              "nativeSrc": "5043:24:24",
                              "nodeType": "YulVariableDeclaration",
                              "src": "5043:24:24",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "key",
                                    "nativeSrc": "5063:3:24",
                                    "nodeType": "YulIdentifier",
                                    "src": "5063:3:24"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nativeSrc": "5057:5:24",
                                  "nodeType": "YulIdentifier",
                                  "src": "5057:5:24"
                                },
                                "nativeSrc": "5057:10:24",
                                "nodeType": "YulFunctionCall",
                                "src": "5057:10:24"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nativeSrc": "5047:6:24",
                                  "nodeType": "YulTypedName",
                                  "src": "5047:6:24",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nativeSrc": "5080:27:24",
                              "nodeType": "YulVariableDeclaration",
                              "src": "5080:27:24",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "key",
                                    "nativeSrc": "5097:3:24",
                                    "nodeType": "YulIdentifier",
                                    "src": "5097:3:24"
                                  },
                                  {
                                    "kind": "number",
                                    "nativeSrc": "5102:4:24",
                                    "nodeType": "YulLiteral",
                                    "src": "5102:4:24",
                                    "type": "",
                                    "value": "0x20"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nativeSrc": "5093:3:24",
                                  "nodeType": "YulIdentifier",
                                  "src": "5093:3:24"
                                },
                                "nativeSrc": "5093:14:24",
                                "nodeType": "YulFunctionCall",
                                "src": "5093:14:24"
                              },
                              "variables": [
                                {
                                  "name": "begin",
                                  "nativeSrc": "5084:5:24",
                                  "nodeType": "YulTypedName",
                                  "src": "5084:5:24",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nativeSrc": "5120:29:24",
                              "nodeType": "YulVariableDeclaration",
                              "src": "5120:29:24",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "begin",
                                    "nativeSrc": "5135:5:24",
                                    "nodeType": "YulIdentifier",
                                    "src": "5135:5:24"
                                  },
                                  {
                                    "name": "length",
                                    "nativeSrc": "5142:6:24",
                                    "nodeType": "YulIdentifier",
                                    "src": "5142:6:24"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nativeSrc": "5131:3:24",
                                  "nodeType": "YulIdentifier",
                                  "src": "5131:3:24"
                                },
                                "nativeSrc": "5131:18:24",
                                "nodeType": "YulFunctionCall",
                                "src": "5131:18:24"
                              },
                              "variables": [
                                {
                                  "name": "end",
                                  "nativeSrc": "5124:3:24",
                                  "nodeType": "YulTypedName",
                                  "src": "5124:3:24",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nativeSrc": "5162:23:24",
                              "nodeType": "YulVariableDeclaration",
                              "src": "5162:23:24",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "end",
                                    "nativeSrc": "5181:3:24",
                                    "nodeType": "YulIdentifier",
                                    "src": "5181:3:24"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nativeSrc": "5175:5:24",
                                  "nodeType": "YulIdentifier",
                                  "src": "5175:5:24"
                                },
                                "nativeSrc": "5175:10:24",
                                "nodeType": "YulFunctionCall",
                                "src": "5175:10:24"
                              },
                              "variables": [
                                {
                                  "name": "cache",
                                  "nativeSrc": "5166:5:24",
                                  "nodeType": "YulTypedName",
                                  "src": "5166:5:24",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "end",
                                    "nativeSrc": "5205:3:24",
                                    "nodeType": "YulIdentifier",
                                    "src": "5205:3:24"
                                  },
                                  {
                                    "name": "slot",
                                    "nativeSrc": "5210:4:24",
                                    "nodeType": "YulIdentifier",
                                    "src": "5210:4:24"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nativeSrc": "5198:6:24",
                                  "nodeType": "YulIdentifier",
                                  "src": "5198:6:24"
                                },
                                "nativeSrc": "5198:17:24",
                                "nodeType": "YulFunctionCall",
                                "src": "5198:17:24"
                              },
                              "nativeSrc": "5198:17:24",
                              "nodeType": "YulExpressionStatement",
                              "src": "5198:17:24"
                            },
                            {
                              "nativeSrc": "5228:45:24",
                              "nodeType": "YulAssignment",
                              "src": "5228:45:24",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "begin",
                                    "nativeSrc": "5248:5:24",
                                    "nodeType": "YulIdentifier",
                                    "src": "5248:5:24"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "length",
                                        "nativeSrc": "5259:6:24",
                                        "nodeType": "YulIdentifier",
                                        "src": "5259:6:24"
                                      },
                                      {
                                        "kind": "number",
                                        "nativeSrc": "5267:4:24",
                                        "nodeType": "YulLiteral",
                                        "src": "5267:4:24",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nativeSrc": "5255:3:24",
                                      "nodeType": "YulIdentifier",
                                      "src": "5255:3:24"
                                    },
                                    "nativeSrc": "5255:17:24",
                                    "nodeType": "YulFunctionCall",
                                    "src": "5255:17:24"
                                  }
                                ],
                                "functionName": {
                                  "name": "keccak256",
                                  "nativeSrc": "5238:9:24",
                                  "nodeType": "YulIdentifier",
                                  "src": "5238:9:24"
                                },
                                "nativeSrc": "5238:35:24",
                                "nodeType": "YulFunctionCall",
                                "src": "5238:35:24"
                              },
                              "variableNames": [
                                {
                                  "name": "result",
                                  "nativeSrc": "5228:6:24",
                                  "nodeType": "YulIdentifier",
                                  "src": "5228:6:24"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "end",
                                    "nativeSrc": "5293:3:24",
                                    "nodeType": "YulIdentifier",
                                    "src": "5293:3:24"
                                  },
                                  {
                                    "name": "cache",
                                    "nativeSrc": "5298:5:24",
                                    "nodeType": "YulIdentifier",
                                    "src": "5298:5:24"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nativeSrc": "5286:6:24",
                                  "nodeType": "YulIdentifier",
                                  "src": "5286:6:24"
                                },
                                "nativeSrc": "5286:18:24",
                                "nodeType": "YulFunctionCall",
                                "src": "5286:18:24"
                              },
                              "nativeSrc": "5286:18:24",
                              "nodeType": "YulExpressionStatement",
                              "src": "5286:18:24"
                            }
                          ]
                        },
                        "evmVersion": "paris",
                        "externalReferences": [
                          {
                            "declaration": 4847,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5063:3:24",
                            "valueSize": 1
                          },
                          {
                            "declaration": 4847,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5097:3:24",
                            "valueSize": 1
                          },
                          {
                            "declaration": 4850,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5228:6:24",
                            "valueSize": 1
                          },
                          {
                            "declaration": 4845,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5210:4:24",
                            "valueSize": 1
                          }
                        ],
                        "flags": [
                          "memory-safe"
                        ],
                        "id": 4852,
                        "nodeType": "InlineAssembly",
                        "src": "5004:310:24"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4843,
                    "nodeType": "StructuredDocumentation",
                    "src": "4817:78:24",
                    "text": " @dev Derive the location of a mapping element from the key."
                  },
                  "id": 4854,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "deriveMapping",
                  "nameLocation": "4909:13:24",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4848,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4845,
                        "mutability": "mutable",
                        "name": "slot",
                        "nameLocation": "4931:4:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 4854,
                        "src": "4923:12:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4844,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "4923:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 4847,
                        "mutability": "mutable",
                        "name": "key",
                        "nameLocation": "4950:3:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 4854,
                        "src": "4937:16:24",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 4846,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "4937:5:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4922:32:24"
                  },
                  "returnParameters": {
                    "id": 4851,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4850,
                        "mutability": "mutable",
                        "name": "result",
                        "nameLocation": "4986:6:24",
                        "nodeType": "VariableDeclaration",
                        "scope": 4854,
                        "src": "4978:14:24",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4849,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "4978:7:24",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4977:16:24"
                  },
                  "scope": 4855,
                  "src": "4900:420:24",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 4856,
              "src": "1599:3723:24",
              "usedErrors": [],
              "usedEvents": []
            }
          ],
          "src": "199:5124:24"
        },
        "id": 24
      },
      "@openzeppelin/contracts/utils/StorageSlot.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/utils/StorageSlot.sol",
          "exportedSymbols": {
            "StorageSlot": [
              4979
            ]
          },
          "id": 4980,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 4857,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".20"
              ],
              "nodeType": "PragmaDirective",
              "src": "193:24:25"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "canonicalName": "StorageSlot",
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 4858,
                "nodeType": "StructuredDocumentation",
                "src": "219:1187:25",
                "text": " @dev Library for reading and writing primitive types to specific storage slots.\n Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\n This library helps with reading and writing to such slots without the need for inline assembly.\n The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\n Example usage to set ERC-1967 implementation slot:\n ```solidity\n contract ERC1967 {\n     // Define the slot. Alternatively, use the SlotDerivation library to derive the slot.\n     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n     function _getImplementation() internal view returns (address) {\n         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n     }\n     function _setImplementation(address newImplementation) internal {\n         require(newImplementation.code.length > 0);\n         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n     }\n }\n ```\n TIP: Consider using this library along with {SlotDerivation}."
              },
              "fullyImplemented": true,
              "id": 4979,
              "linearizedBaseContracts": [
                4979
              ],
              "name": "StorageSlot",
              "nameLocation": "1415:11:25",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "canonicalName": "StorageSlot.AddressSlot",
                  "id": 4861,
                  "members": [
                    {
                      "constant": false,
                      "id": 4860,
                      "mutability": "mutable",
                      "name": "value",
                      "nameLocation": "1470:5:25",
                      "nodeType": "VariableDeclaration",
                      "scope": 4861,
                      "src": "1462:13:25",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4859,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1462:7:25",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "name": "AddressSlot",
                  "nameLocation": "1440:11:25",
                  "nodeType": "StructDefinition",
                  "scope": 4979,
                  "src": "1433:49:25",
                  "visibility": "public"
                },
                {
                  "canonicalName": "StorageSlot.BooleanSlot",
                  "id": 4864,
                  "members": [
                    {
                      "constant": false,
                      "id": 4863,
                      "mutability": "mutable",
                      "name": "value",
                      "nameLocation": "1522:5:25",
                      "nodeType": "VariableDeclaration",
                      "scope": 4864,
                      "src": "1517:10:25",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 4862,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "1517:4:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "name": "BooleanSlot",
                  "nameLocation": "1495:11:25",
                  "nodeType": "StructDefinition",
                  "scope": 4979,
                  "src": "1488:46:25",
                  "visibility": "public"
                },
                {
                  "canonicalName": "StorageSlot.Bytes32Slot",
                  "id": 4867,
                  "members": [
                    {
                      "constant": false,
                      "id": 4866,
                      "mutability": "mutable",
                      "name": "value",
                      "nameLocation": "1577:5:25",
                      "nodeType": "VariableDeclaration",
                      "scope": 4867,
                      "src": "1569:13:25",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 4865,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "1569:7:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "name": "Bytes32Slot",
                  "nameLocation": "1547:11:25",
                  "nodeType": "StructDefinition",
                  "scope": 4979,
                  "src": "1540:49:25",
                  "visibility": "public"
                },
                {
                  "canonicalName": "StorageSlot.Uint256Slot",
                  "id": 4870,
                  "members": [
                    {
                      "constant": false,
                      "id": 4869,
                      "mutability": "mutable",
                      "name": "value",
                      "nameLocation": "1632:5:25",
                      "nodeType": "VariableDeclaration",
                      "scope": 4870,
                      "src": "1624:13:25",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4868,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1624:7:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "name": "Uint256Slot",
                  "nameLocation": "1602:11:25",
                  "nodeType": "StructDefinition",
                  "scope": 4979,
                  "src": "1595:49:25",
                  "visibility": "public"
                },
                {
                  "canonicalName": "StorageSlot.Int256Slot",
                  "id": 4873,
                  "members": [
                    {
                      "constant": false,
                      "id": 4872,
                      "mutability": "mutable",
                      "name": "value",
                      "nameLocation": "1685:5:25",
                      "nodeType": "VariableDeclaration",
                      "scope": 4873,
                      "src": "1678:12:25",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      },
                      "typeName": {
                        "id": 4871,
                        "name": "int256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1678:6:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "name": "Int256Slot",
                  "nameLocation": "1657:10:25",
                  "nodeType": "StructDefinition",
                  "scope": 4979,
                  "src": "1650:47:25",
                  "visibility": "public"
                },
                {
                  "canonicalName": "StorageSlot.StringSlot",
                  "id": 4876,
                  "members": [
                    {
                      "constant": false,
                      "id": 4875,
                      "mutability": "mutable",
                      "name": "value",
                      "nameLocation": "1738:5:25",
                      "nodeType": "VariableDeclaration",
                      "scope": 4876,
                      "src": "1731:12:25",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 4874,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "1731:6:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "name": "StringSlot",
                  "nameLocation": "1710:10:25",
                  "nodeType": "StructDefinition",
                  "scope": 4979,
                  "src": "1703:47:25",
                  "visibility": "public"
                },
                {
                  "canonicalName": "StorageSlot.BytesSlot",
                  "id": 4879,
                  "members": [
                    {
                      "constant": false,
                      "id": 4878,
                      "mutability": "mutable",
                      "name": "value",
                      "nameLocation": "1789:5:25",
                      "nodeType": "VariableDeclaration",
                      "scope": 4879,
                      "src": "1783:11:25",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_storage_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 4877,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "1783:5:25",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "name": "BytesSlot",
                  "nameLocation": "1763:9:25",
                  "nodeType": "StructDefinition",
                  "scope": 4979,
                  "src": "1756:45:25",
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 4889,
                    "nodeType": "Block",
                    "src": "1983:79:25",
                    "statements": [
                      {
                        "AST": {
                          "nativeSrc": "2018:38:25",
                          "nodeType": "YulBlock",
                          "src": "2018:38:25",
                          "statements": [
                            {
                              "nativeSrc": "2032:14:25",
                              "nodeType": "YulAssignment",
                              "src": "2032:14:25",
                              "value": {
                                "name": "slot",
                                "nativeSrc": "2042:4:25",
                                "nodeType": "YulIdentifier",
                                "src": "2042:4:25"
                              },
                              "variableNames": [
                                {
                                  "name": "r.slot",
                                  "nativeSrc": "2032:6:25",
                                  "nodeType": "YulIdentifier",
                                  "src": "2032:6:25"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "paris",
                        "externalReferences": [
                          {
                            "declaration": 4886,
                            "isOffset": false,
                            "isSlot": true,
                            "src": "2032:6:25",
                            "suffix": "slot",
                            "valueSize": 1
                          },
                          {
                            "declaration": 4882,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "2042:4:25",
                            "valueSize": 1
                          }
                        ],
                        "flags": [
                          "memory-safe"
                        ],
                        "id": 4888,
                        "nodeType": "InlineAssembly",
                        "src": "1993:63:25"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4880,
                    "nodeType": "StructuredDocumentation",
                    "src": "1807:87:25",
                    "text": " @dev Returns an `AddressSlot` with member `value` located at `slot`."
                  },
                  "id": 4890,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getAddressSlot",
                  "nameLocation": "1908:14:25",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4883,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4882,
                        "mutability": "mutable",
                        "name": "slot",
                        "nameLocation": "1931:4:25",
                        "nodeType": "VariableDeclaration",
                        "scope": 4890,
                        "src": "1923:12:25",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4881,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "1923:7:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1922:14:25"
                  },
                  "returnParameters": {
                    "id": 4887,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4886,
                        "mutability": "mutable",
                        "name": "r",
                        "nameLocation": "1980:1:25",
                        "nodeType": "VariableDeclaration",
                        "scope": 4890,
                        "src": "1960:21:25",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_AddressSlot_$4861_storage_ptr",
                          "typeString": "struct StorageSlot.AddressSlot"
                        },
                        "typeName": {
                          "id": 4885,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 4884,
                            "name": "AddressSlot",
                            "nameLocations": [
                              "1960:11:25"
                            ],
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 4861,
                            "src": "1960:11:25"
                          },
                          "referencedDeclaration": 4861,
                          "src": "1960:11:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_AddressSlot_$4861_storage_ptr",
                            "typeString": "struct StorageSlot.AddressSlot"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1959:23:25"
                  },
                  "scope": 4979,
                  "src": "1899:163:25",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4900,
                    "nodeType": "Block",
                    "src": "2243:79:25",
                    "statements": [
                      {
                        "AST": {
                          "nativeSrc": "2278:38:25",
                          "nodeType": "YulBlock",
                          "src": "2278:38:25",
                          "statements": [
                            {
                              "nativeSrc": "2292:14:25",
                              "nodeType": "YulAssignment",
                              "src": "2292:14:25",
                              "value": {
                                "name": "slot",
                                "nativeSrc": "2302:4:25",
                                "nodeType": "YulIdentifier",
                                "src": "2302:4:25"
                              },
                              "variableNames": [
                                {
                                  "name": "r.slot",
                                  "nativeSrc": "2292:6:25",
                                  "nodeType": "YulIdentifier",
                                  "src": "2292:6:25"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "paris",
                        "externalReferences": [
                          {
                            "declaration": 4897,
                            "isOffset": false,
                            "isSlot": true,
                            "src": "2292:6:25",
                            "suffix": "slot",
                            "valueSize": 1
                          },
                          {
                            "declaration": 4893,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "2302:4:25",
                            "valueSize": 1
                          }
                        ],
                        "flags": [
                          "memory-safe"
                        ],
                        "id": 4899,
                        "nodeType": "InlineAssembly",
                        "src": "2253:63:25"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4891,
                    "nodeType": "StructuredDocumentation",
                    "src": "2068:86:25",
                    "text": " @dev Returns a `BooleanSlot` with member `value` located at `slot`."
                  },
                  "id": 4901,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getBooleanSlot",
                  "nameLocation": "2168:14:25",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4894,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4893,
                        "mutability": "mutable",
                        "name": "slot",
                        "nameLocation": "2191:4:25",
                        "nodeType": "VariableDeclaration",
                        "scope": 4901,
                        "src": "2183:12:25",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4892,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2183:7:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2182:14:25"
                  },
                  "returnParameters": {
                    "id": 4898,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4897,
                        "mutability": "mutable",
                        "name": "r",
                        "nameLocation": "2240:1:25",
                        "nodeType": "VariableDeclaration",
                        "scope": 4901,
                        "src": "2220:21:25",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_BooleanSlot_$4864_storage_ptr",
                          "typeString": "struct StorageSlot.BooleanSlot"
                        },
                        "typeName": {
                          "id": 4896,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 4895,
                            "name": "BooleanSlot",
                            "nameLocations": [
                              "2220:11:25"
                            ],
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 4864,
                            "src": "2220:11:25"
                          },
                          "referencedDeclaration": 4864,
                          "src": "2220:11:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_BooleanSlot_$4864_storage_ptr",
                            "typeString": "struct StorageSlot.BooleanSlot"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2219:23:25"
                  },
                  "scope": 4979,
                  "src": "2159:163:25",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4911,
                    "nodeType": "Block",
                    "src": "2503:79:25",
                    "statements": [
                      {
                        "AST": {
                          "nativeSrc": "2538:38:25",
                          "nodeType": "YulBlock",
                          "src": "2538:38:25",
                          "statements": [
                            {
                              "nativeSrc": "2552:14:25",
                              "nodeType": "YulAssignment",
                              "src": "2552:14:25",
                              "value": {
                                "name": "slot",
                                "nativeSrc": "2562:4:25",
                                "nodeType": "YulIdentifier",
                                "src": "2562:4:25"
                              },
                              "variableNames": [
                                {
                                  "name": "r.slot",
                                  "nativeSrc": "2552:6:25",
                                  "nodeType": "YulIdentifier",
                                  "src": "2552:6:25"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "paris",
                        "externalReferences": [
                          {
                            "declaration": 4908,
                            "isOffset": false,
                            "isSlot": true,
                            "src": "2552:6:25",
                            "suffix": "slot",
                            "valueSize": 1
                          },
                          {
                            "declaration": 4904,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "2562:4:25",
                            "valueSize": 1
                          }
                        ],
                        "flags": [
                          "memory-safe"
                        ],
                        "id": 4910,
                        "nodeType": "InlineAssembly",
                        "src": "2513:63:25"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4902,
                    "nodeType": "StructuredDocumentation",
                    "src": "2328:86:25",
                    "text": " @dev Returns a `Bytes32Slot` with member `value` located at `slot`."
                  },
                  "id": 4912,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getBytes32Slot",
                  "nameLocation": "2428:14:25",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4905,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4904,
                        "mutability": "mutable",
                        "name": "slot",
                        "nameLocation": "2451:4:25",
                        "nodeType": "VariableDeclaration",
                        "scope": 4912,
                        "src": "2443:12:25",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4903,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2443:7:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2442:14:25"
                  },
                  "returnParameters": {
                    "id": 4909,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4908,
                        "mutability": "mutable",
                        "name": "r",
                        "nameLocation": "2500:1:25",
                        "nodeType": "VariableDeclaration",
                        "scope": 4912,
                        "src": "2480:21:25",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Bytes32Slot_$4867_storage_ptr",
                          "typeString": "struct StorageSlot.Bytes32Slot"
                        },
                        "typeName": {
                          "id": 4907,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 4906,
                            "name": "Bytes32Slot",
                            "nameLocations": [
                              "2480:11:25"
                            ],
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 4867,
                            "src": "2480:11:25"
                          },
                          "referencedDeclaration": 4867,
                          "src": "2480:11:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Bytes32Slot_$4867_storage_ptr",
                            "typeString": "struct StorageSlot.Bytes32Slot"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2479:23:25"
                  },
                  "scope": 4979,
                  "src": "2419:163:25",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4922,
                    "nodeType": "Block",
                    "src": "2763:79:25",
                    "statements": [
                      {
                        "AST": {
                          "nativeSrc": "2798:38:25",
                          "nodeType": "YulBlock",
                          "src": "2798:38:25",
                          "statements": [
                            {
                              "nativeSrc": "2812:14:25",
                              "nodeType": "YulAssignment",
                              "src": "2812:14:25",
                              "value": {
                                "name": "slot",
                                "nativeSrc": "2822:4:25",
                                "nodeType": "YulIdentifier",
                                "src": "2822:4:25"
                              },
                              "variableNames": [
                                {
                                  "name": "r.slot",
                                  "nativeSrc": "2812:6:25",
                                  "nodeType": "YulIdentifier",
                                  "src": "2812:6:25"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "paris",
                        "externalReferences": [
                          {
                            "declaration": 4919,
                            "isOffset": false,
                            "isSlot": true,
                            "src": "2812:6:25",
                            "suffix": "slot",
                            "valueSize": 1
                          },
                          {
                            "declaration": 4915,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "2822:4:25",
                            "valueSize": 1
                          }
                        ],
                        "flags": [
                          "memory-safe"
                        ],
                        "id": 4921,
                        "nodeType": "InlineAssembly",
                        "src": "2773:63:25"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4913,
                    "nodeType": "StructuredDocumentation",
                    "src": "2588:86:25",
                    "text": " @dev Returns a `Uint256Slot` with member `value` located at `slot`."
                  },
                  "id": 4923,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getUint256Slot",
                  "nameLocation": "2688:14:25",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4916,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4915,
                        "mutability": "mutable",
                        "name": "slot",
                        "nameLocation": "2711:4:25",
                        "nodeType": "VariableDeclaration",
                        "scope": 4923,
                        "src": "2703:12:25",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4914,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2703:7:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2702:14:25"
                  },
                  "returnParameters": {
                    "id": 4920,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4919,
                        "mutability": "mutable",
                        "name": "r",
                        "nameLocation": "2760:1:25",
                        "nodeType": "VariableDeclaration",
                        "scope": 4923,
                        "src": "2740:21:25",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Uint256Slot_$4870_storage_ptr",
                          "typeString": "struct StorageSlot.Uint256Slot"
                        },
                        "typeName": {
                          "id": 4918,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 4917,
                            "name": "Uint256Slot",
                            "nameLocations": [
                              "2740:11:25"
                            ],
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 4870,
                            "src": "2740:11:25"
                          },
                          "referencedDeclaration": 4870,
                          "src": "2740:11:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Uint256Slot_$4870_storage_ptr",
                            "typeString": "struct StorageSlot.Uint256Slot"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2739:23:25"
                  },
                  "scope": 4979,
                  "src": "2679:163:25",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4933,
                    "nodeType": "Block",
                    "src": "3020:79:25",
                    "statements": [
                      {
                        "AST": {
                          "nativeSrc": "3055:38:25",
                          "nodeType": "YulBlock",
                          "src": "3055:38:25",
                          "statements": [
                            {
                              "nativeSrc": "3069:14:25",
                              "nodeType": "YulAssignment",
                              "src": "3069:14:25",
                              "value": {
                                "name": "slot",
                                "nativeSrc": "3079:4:25",
                                "nodeType": "YulIdentifier",
                                "src": "3079:4:25"
                              },
                              "variableNames": [
                                {
                                  "name": "r.slot",
                                  "nativeSrc": "3069:6:25",
                                  "nodeType": "YulIdentifier",
                                  "src": "3069:6:25"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "paris",
                        "externalReferences": [
                          {
                            "declaration": 4930,
                            "isOffset": false,
                            "isSlot": true,
                            "src": "3069:6:25",
                            "suffix": "slot",
                            "valueSize": 1
                          },
                          {
                            "declaration": 4926,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "3079:4:25",
                            "valueSize": 1
                          }
                        ],
                        "flags": [
                          "memory-safe"
                        ],
                        "id": 4932,
                        "nodeType": "InlineAssembly",
                        "src": "3030:63:25"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4924,
                    "nodeType": "StructuredDocumentation",
                    "src": "2848:85:25",
                    "text": " @dev Returns a `Int256Slot` with member `value` located at `slot`."
                  },
                  "id": 4934,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getInt256Slot",
                  "nameLocation": "2947:13:25",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4927,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4926,
                        "mutability": "mutable",
                        "name": "slot",
                        "nameLocation": "2969:4:25",
                        "nodeType": "VariableDeclaration",
                        "scope": 4934,
                        "src": "2961:12:25",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4925,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "2961:7:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2960:14:25"
                  },
                  "returnParameters": {
                    "id": 4931,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4930,
                        "mutability": "mutable",
                        "name": "r",
                        "nameLocation": "3017:1:25",
                        "nodeType": "VariableDeclaration",
                        "scope": 4934,
                        "src": "2998:20:25",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Int256Slot_$4873_storage_ptr",
                          "typeString": "struct StorageSlot.Int256Slot"
                        },
                        "typeName": {
                          "id": 4929,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 4928,
                            "name": "Int256Slot",
                            "nameLocations": [
                              "2998:10:25"
                            ],
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 4873,
                            "src": "2998:10:25"
                          },
                          "referencedDeclaration": 4873,
                          "src": "2998:10:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Int256Slot_$4873_storage_ptr",
                            "typeString": "struct StorageSlot.Int256Slot"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2997:22:25"
                  },
                  "scope": 4979,
                  "src": "2938:161:25",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4944,
                    "nodeType": "Block",
                    "src": "3277:79:25",
                    "statements": [
                      {
                        "AST": {
                          "nativeSrc": "3312:38:25",
                          "nodeType": "YulBlock",
                          "src": "3312:38:25",
                          "statements": [
                            {
                              "nativeSrc": "3326:14:25",
                              "nodeType": "YulAssignment",
                              "src": "3326:14:25",
                              "value": {
                                "name": "slot",
                                "nativeSrc": "3336:4:25",
                                "nodeType": "YulIdentifier",
                                "src": "3336:4:25"
                              },
                              "variableNames": [
                                {
                                  "name": "r.slot",
                                  "nativeSrc": "3326:6:25",
                                  "nodeType": "YulIdentifier",
                                  "src": "3326:6:25"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "paris",
                        "externalReferences": [
                          {
                            "declaration": 4941,
                            "isOffset": false,
                            "isSlot": true,
                            "src": "3326:6:25",
                            "suffix": "slot",
                            "valueSize": 1
                          },
                          {
                            "declaration": 4937,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "3336:4:25",
                            "valueSize": 1
                          }
                        ],
                        "flags": [
                          "memory-safe"
                        ],
                        "id": 4943,
                        "nodeType": "InlineAssembly",
                        "src": "3287:63:25"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4935,
                    "nodeType": "StructuredDocumentation",
                    "src": "3105:85:25",
                    "text": " @dev Returns a `StringSlot` with member `value` located at `slot`."
                  },
                  "id": 4945,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getStringSlot",
                  "nameLocation": "3204:13:25",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4938,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4937,
                        "mutability": "mutable",
                        "name": "slot",
                        "nameLocation": "3226:4:25",
                        "nodeType": "VariableDeclaration",
                        "scope": 4945,
                        "src": "3218:12:25",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4936,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "3218:7:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3217:14:25"
                  },
                  "returnParameters": {
                    "id": 4942,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4941,
                        "mutability": "mutable",
                        "name": "r",
                        "nameLocation": "3274:1:25",
                        "nodeType": "VariableDeclaration",
                        "scope": 4945,
                        "src": "3255:20:25",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_StringSlot_$4876_storage_ptr",
                          "typeString": "struct StorageSlot.StringSlot"
                        },
                        "typeName": {
                          "id": 4940,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 4939,
                            "name": "StringSlot",
                            "nameLocations": [
                              "3255:10:25"
                            ],
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 4876,
                            "src": "3255:10:25"
                          },
                          "referencedDeclaration": 4876,
                          "src": "3255:10:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_StringSlot_$4876_storage_ptr",
                            "typeString": "struct StorageSlot.StringSlot"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3254:22:25"
                  },
                  "scope": 4979,
                  "src": "3195:161:25",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4955,
                    "nodeType": "Block",
                    "src": "3558:85:25",
                    "statements": [
                      {
                        "AST": {
                          "nativeSrc": "3593:44:25",
                          "nodeType": "YulBlock",
                          "src": "3593:44:25",
                          "statements": [
                            {
                              "nativeSrc": "3607:20:25",
                              "nodeType": "YulAssignment",
                              "src": "3607:20:25",
                              "value": {
                                "name": "store.slot",
                                "nativeSrc": "3617:10:25",
                                "nodeType": "YulIdentifier",
                                "src": "3617:10:25"
                              },
                              "variableNames": [
                                {
                                  "name": "r.slot",
                                  "nativeSrc": "3607:6:25",
                                  "nodeType": "YulIdentifier",
                                  "src": "3607:6:25"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "paris",
                        "externalReferences": [
                          {
                            "declaration": 4952,
                            "isOffset": false,
                            "isSlot": true,
                            "src": "3607:6:25",
                            "suffix": "slot",
                            "valueSize": 1
                          },
                          {
                            "declaration": 4948,
                            "isOffset": false,
                            "isSlot": true,
                            "src": "3617:10:25",
                            "suffix": "slot",
                            "valueSize": 1
                          }
                        ],
                        "flags": [
                          "memory-safe"
                        ],
                        "id": 4954,
                        "nodeType": "InlineAssembly",
                        "src": "3568:69:25"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4946,
                    "nodeType": "StructuredDocumentation",
                    "src": "3362:101:25",
                    "text": " @dev Returns an `StringSlot` representation of the string storage pointer `store`."
                  },
                  "id": 4956,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getStringSlot",
                  "nameLocation": "3477:13:25",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4949,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4948,
                        "mutability": "mutable",
                        "name": "store",
                        "nameLocation": "3506:5:25",
                        "nodeType": "VariableDeclaration",
                        "scope": 4956,
                        "src": "3491:20:25",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 4947,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "3491:6:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3490:22:25"
                  },
                  "returnParameters": {
                    "id": 4953,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4952,
                        "mutability": "mutable",
                        "name": "r",
                        "nameLocation": "3555:1:25",
                        "nodeType": "VariableDeclaration",
                        "scope": 4956,
                        "src": "3536:20:25",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_StringSlot_$4876_storage_ptr",
                          "typeString": "struct StorageSlot.StringSlot"
                        },
                        "typeName": {
                          "id": 4951,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 4950,
                            "name": "StringSlot",
                            "nameLocations": [
                              "3536:10:25"
                            ],
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 4876,
                            "src": "3536:10:25"
                          },
                          "referencedDeclaration": 4876,
                          "src": "3536:10:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_StringSlot_$4876_storage_ptr",
                            "typeString": "struct StorageSlot.StringSlot"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3535:22:25"
                  },
                  "scope": 4979,
                  "src": "3468:175:25",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4966,
                    "nodeType": "Block",
                    "src": "3818:79:25",
                    "statements": [
                      {
                        "AST": {
                          "nativeSrc": "3853:38:25",
                          "nodeType": "YulBlock",
                          "src": "3853:38:25",
                          "statements": [
                            {
                              "nativeSrc": "3867:14:25",
                              "nodeType": "YulAssignment",
                              "src": "3867:14:25",
                              "value": {
                                "name": "slot",
                                "nativeSrc": "3877:4:25",
                                "nodeType": "YulIdentifier",
                                "src": "3877:4:25"
                              },
                              "variableNames": [
                                {
                                  "name": "r.slot",
                                  "nativeSrc": "3867:6:25",
                                  "nodeType": "YulIdentifier",
                                  "src": "3867:6:25"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "paris",
                        "externalReferences": [
                          {
                            "declaration": 4963,
                            "isOffset": false,
                            "isSlot": true,
                            "src": "3867:6:25",
                            "suffix": "slot",
                            "valueSize": 1
                          },
                          {
                            "declaration": 4959,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "3877:4:25",
                            "valueSize": 1
                          }
                        ],
                        "flags": [
                          "memory-safe"
                        ],
                        "id": 4965,
                        "nodeType": "InlineAssembly",
                        "src": "3828:63:25"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4957,
                    "nodeType": "StructuredDocumentation",
                    "src": "3649:84:25",
                    "text": " @dev Returns a `BytesSlot` with member `value` located at `slot`."
                  },
                  "id": 4967,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getBytesSlot",
                  "nameLocation": "3747:12:25",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4960,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4959,
                        "mutability": "mutable",
                        "name": "slot",
                        "nameLocation": "3768:4:25",
                        "nodeType": "VariableDeclaration",
                        "scope": 4967,
                        "src": "3760:12:25",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 4958,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "3760:7:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3759:14:25"
                  },
                  "returnParameters": {
                    "id": 4964,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4963,
                        "mutability": "mutable",
                        "name": "r",
                        "nameLocation": "3815:1:25",
                        "nodeType": "VariableDeclaration",
                        "scope": 4967,
                        "src": "3797:19:25",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_BytesSlot_$4879_storage_ptr",
                          "typeString": "struct StorageSlot.BytesSlot"
                        },
                        "typeName": {
                          "id": 4962,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 4961,
                            "name": "BytesSlot",
                            "nameLocations": [
                              "3797:9:25"
                            ],
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 4879,
                            "src": "3797:9:25"
                          },
                          "referencedDeclaration": 4879,
                          "src": "3797:9:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_BytesSlot_$4879_storage_ptr",
                            "typeString": "struct StorageSlot.BytesSlot"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3796:21:25"
                  },
                  "scope": 4979,
                  "src": "3738:159:25",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 4977,
                    "nodeType": "Block",
                    "src": "4094:85:25",
                    "statements": [
                      {
                        "AST": {
                          "nativeSrc": "4129:44:25",
                          "nodeType": "YulBlock",
                          "src": "4129:44:25",
                          "statements": [
                            {
                              "nativeSrc": "4143:20:25",
                              "nodeType": "YulAssignment",
                              "src": "4143:20:25",
                              "value": {
                                "name": "store.slot",
                                "nativeSrc": "4153:10:25",
                                "nodeType": "YulIdentifier",
                                "src": "4153:10:25"
                              },
                              "variableNames": [
                                {
                                  "name": "r.slot",
                                  "nativeSrc": "4143:6:25",
                                  "nodeType": "YulIdentifier",
                                  "src": "4143:6:25"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "paris",
                        "externalReferences": [
                          {
                            "declaration": 4974,
                            "isOffset": false,
                            "isSlot": true,
                            "src": "4143:6:25",
                            "suffix": "slot",
                            "valueSize": 1
                          },
                          {
                            "declaration": 4970,
                            "isOffset": false,
                            "isSlot": true,
                            "src": "4153:10:25",
                            "suffix": "slot",
                            "valueSize": 1
                          }
                        ],
                        "flags": [
                          "memory-safe"
                        ],
                        "id": 4976,
                        "nodeType": "InlineAssembly",
                        "src": "4104:69:25"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 4968,
                    "nodeType": "StructuredDocumentation",
                    "src": "3903:99:25",
                    "text": " @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`."
                  },
                  "id": 4978,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getBytesSlot",
                  "nameLocation": "4016:12:25",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 4971,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4970,
                        "mutability": "mutable",
                        "name": "store",
                        "nameLocation": "4043:5:25",
                        "nodeType": "VariableDeclaration",
                        "scope": 4978,
                        "src": "4029:19:25",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 4969,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "4029:5:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4028:21:25"
                  },
                  "returnParameters": {
                    "id": 4975,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 4974,
                        "mutability": "mutable",
                        "name": "r",
                        "nameLocation": "4091:1:25",
                        "nodeType": "VariableDeclaration",
                        "scope": 4978,
                        "src": "4073:19:25",
                        "stateVariable": false,
                        "storageLocation": "storage",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_BytesSlot_$4879_storage_ptr",
                          "typeString": "struct StorageSlot.BytesSlot"
                        },
                        "typeName": {
                          "id": 4973,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 4972,
                            "name": "BytesSlot",
                            "nameLocations": [
                              "4073:9:25"
                            ],
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 4879,
                            "src": "4073:9:25"
                          },
                          "referencedDeclaration": 4879,
                          "src": "4073:9:25",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_BytesSlot_$4879_storage_ptr",
                            "typeString": "struct StorageSlot.BytesSlot"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4072:21:25"
                  },
                  "scope": 4979,
                  "src": "4007:172:25",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 4980,
              "src": "1407:2774:25",
              "usedErrors": [],
              "usedEvents": []
            }
          ],
          "src": "193:3989:25"
        },
        "id": 25
      },
      "@openzeppelin/contracts/utils/Strings.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/utils/Strings.sol",
          "exportedSymbols": {
            "Math": [
              8014
            ],
            "SafeCast": [
              9779
            ],
            "SignedMath": [
              9923
            ],
            "Strings": [
              6381
            ]
          },
          "id": 6382,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 4981,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".20"
              ],
              "nodeType": "PragmaDirective",
              "src": "101:24:26"
            },
            {
              "absolutePath": "@openzeppelin/contracts/utils/math/Math.sol",
              "file": "./math/Math.sol",
              "id": 4983,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 6382,
              "sourceUnit": 8015,
              "src": "127:37:26",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 4982,
                    "name": "Math",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8014,
                    "src": "135:4:26",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/utils/math/SafeCast.sol",
              "file": "./math/SafeCast.sol",
              "id": 4985,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 6382,
              "sourceUnit": 9780,
              "src": "165:45:26",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 4984,
                    "name": "SafeCast",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 9779,
                    "src": "173:8:26",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/utils/math/SignedMath.sol",
              "file": "./math/SignedMath.sol",
              "id": 4987,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 6382,
              "sourceUnit": 9924,
              "src": "211:49:26",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 4986,
                    "name": "SignedMath",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 9923,
                    "src": "219:10:26",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [],
              "canonicalName": "Strings",
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 4988,
                "nodeType": "StructuredDocumentation",
                "src": "262:34:26",
                "text": " @dev String operations."
              },
              "fullyImplemented": true,
              "id": 6381,
              "linearizedBaseContracts": [
                6381
              ],
              "name": "Strings",
              "nameLocation": "305:7:26",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "global": false,
                  "id": 4990,
                  "libraryName": {
                    "id": 4989,
                    "name": "SafeCast",
                    "nameLocations": [
                      "325:8:26"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 9779,
                    "src": "325:8:26"
                  },
                  "nodeType": "UsingForDirective",
                  "src": "319:21:26"
                },
                {
                  "constant": true,
                  "id": 4993,
                  "mutability": "constant",
                  "name": "HEX_DIGITS",
                  "nameLocation": "371:10:26",
                  "nodeType": "VariableDeclaration",
                  "scope": 6381,
                  "src": "346:56:26",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes16",
                    "typeString": "bytes16"
                  },
                  "typeName": {
                    "id": 4991,
                    "name": "bytes16",
                    "nodeType": "ElementaryTypeName",
                    "src": "346:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes16",
                      "typeString": "bytes16"
                    }
                  },
                  "value": {
                    "hexValue": "30313233343536373839616263646566",
                    "id": 4992,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "384:18:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_cb29997ed99ead0db59ce4d12b7d3723198c827273e5796737c926d78019c39f",
                      "typeString": "literal_string \"0123456789abcdef\""
                    },
                    "value": "0123456789abcdef"
                  },
                  "visibility": "private"
                },
                {
                  "constant": true,
                  "id": 4996,
                  "mutability": "constant",
                  "name": "ADDRESS_LENGTH",
                  "nameLocation": "431:14:26",
                  "nodeType": "VariableDeclaration",
                  "scope": 6381,
                  "src": "408:42:26",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 4994,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "408:5:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": {
                    "hexValue": "3230",
                    "id": 4995,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "448:2:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_20_by_1",
                      "typeString": "int_const 20"
                    },
                    "value": "20"
                  },
                  "visibility": "private"
                },
                {
                  "constant": true,
                  "id": 5032,
                  "mutability": "constant",
                  "name": "SPECIAL_CHARS_LOOKUP",
                  "nameLocation": "481:20:26",
                  "nodeType": "VariableDeclaration",
                  "scope": 6381,
                  "src": "456:302:26",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4997,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "456:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_4951760157141521116776380160_by_1",
                      "typeString": "int_const 4951760157141521116776380160"
                    },
                    "id": 5031,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_rational_17179883264_by_1",
                        "typeString": "int_const 17179883264"
                      },
                      "id": 5026,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "leftExpression": {
                        "commonType": {
                          "typeIdentifier": "t_rational_14080_by_1",
                          "typeString": "int_const 14080"
                        },
                        "id": 5021,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_rational_5888_by_1",
                            "typeString": "int_const 5888"
                          },
                          "id": 5016,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_rational_1792_by_1",
                              "typeString": "int_const 1792"
                            },
                            "id": 5011,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "leftExpression": {
                              "commonType": {
                                "typeIdentifier": "t_rational_768_by_1",
                                "typeString": "int_const 768"
                              },
                              "id": 5006,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "leftExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_rational_256_by_1",
                                      "typeString": "int_const 256"
                                    },
                                    "id": 5000,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "hexValue": "31",
                                      "id": 4998,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "513:1:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "<<",
                                    "rightExpression": {
                                      "hexValue": "30783038",
                                      "id": 4999,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "518:4:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_8_by_1",
                                        "typeString": "int_const 8"
                                      },
                                      "value": "0x08"
                                    },
                                    "src": "513:9:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_256_by_1",
                                      "typeString": "int_const 256"
                                    }
                                  }
                                ],
                                "id": 5001,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "512:11:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_256_by_1",
                                  "typeString": "int_const 256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "|",
                              "rightExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_rational_512_by_1",
                                      "typeString": "int_const 512"
                                    },
                                    "id": 5004,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "hexValue": "31",
                                      "id": 5002,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "552:1:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "<<",
                                    "rightExpression": {
                                      "hexValue": "30783039",
                                      "id": 5003,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "557:4:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_9_by_1",
                                        "typeString": "int_const 9"
                                      },
                                      "value": "0x09"
                                    },
                                    "src": "552:9:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_512_by_1",
                                      "typeString": "int_const 512"
                                    }
                                  }
                                ],
                                "id": 5005,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "551:11:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_512_by_1",
                                  "typeString": "int_const 512"
                                }
                              },
                              "src": "512:50:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_768_by_1",
                                "typeString": "int_const 768"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "|",
                            "rightExpression": {
                              "components": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_rational_1024_by_1",
                                    "typeString": "int_const 1024"
                                  },
                                  "id": 5009,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "hexValue": "31",
                                    "id": 5007,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "585:1:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "<<",
                                  "rightExpression": {
                                    "hexValue": "30783061",
                                    "id": 5008,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "590:4:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_10_by_1",
                                      "typeString": "int_const 10"
                                    },
                                    "value": "0x0a"
                                  },
                                  "src": "585:9:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1024_by_1",
                                    "typeString": "int_const 1024"
                                  }
                                }
                              ],
                              "id": 5010,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "584:11:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1024_by_1",
                                "typeString": "int_const 1024"
                              }
                            },
                            "src": "512:83:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1792_by_1",
                              "typeString": "int_const 1792"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "|",
                          "rightExpression": {
                            "components": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_rational_4096_by_1",
                                  "typeString": "int_const 4096"
                                },
                                "id": 5014,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "31",
                                  "id": 5012,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "622:1:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<<",
                                "rightExpression": {
                                  "hexValue": "30783063",
                                  "id": 5013,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "627:4:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_12_by_1",
                                    "typeString": "int_const 12"
                                  },
                                  "value": "0x0c"
                                },
                                "src": "622:9:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_4096_by_1",
                                  "typeString": "int_const 4096"
                                }
                              }
                            ],
                            "id": 5015,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "621:11:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_4096_by_1",
                              "typeString": "int_const 4096"
                            }
                          },
                          "src": "512:120:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_5888_by_1",
                            "typeString": "int_const 5888"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "|",
                        "rightExpression": {
                          "components": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_rational_8192_by_1",
                                "typeString": "int_const 8192"
                              },
                              "id": 5019,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "leftExpression": {
                                "hexValue": "31",
                                "id": 5017,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "661:1:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<<",
                              "rightExpression": {
                                "hexValue": "30783064",
                                "id": 5018,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "666:4:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_13_by_1",
                                  "typeString": "int_const 13"
                                },
                                "value": "0x0d"
                              },
                              "src": "661:9:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_8192_by_1",
                                "typeString": "int_const 8192"
                              }
                            }
                          ],
                          "id": 5020,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "660:11:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_8192_by_1",
                            "typeString": "int_const 8192"
                          }
                        },
                        "src": "512:159:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_14080_by_1",
                          "typeString": "int_const 14080"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "|",
                      "rightExpression": {
                        "components": [
                          {
                            "commonType": {
                              "typeIdentifier": "t_rational_17179869184_by_1",
                              "typeString": "int_const 17179869184"
                            },
                            "id": 5024,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "leftExpression": {
                              "hexValue": "31",
                              "id": 5022,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "706:1:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<<",
                            "rightExpression": {
                              "hexValue": "30783232",
                              "id": 5023,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "711:4:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_34_by_1",
                                "typeString": "int_const 34"
                              },
                              "value": "0x22"
                            },
                            "src": "706:9:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_17179869184_by_1",
                              "typeString": "int_const 17179869184"
                            }
                          }
                        ],
                        "id": 5025,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "705:11:26",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_17179869184_by_1",
                          "typeString": "int_const 17179869184"
                        }
                      },
                      "src": "512:204:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_17179883264_by_1",
                        "typeString": "int_const 17179883264"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "|",
                    "rightExpression": {
                      "components": [
                        {
                          "commonType": {
                            "typeIdentifier": "t_rational_4951760157141521099596496896_by_1",
                            "typeString": "int_const 4951760157141521099596496896"
                          },
                          "id": 5029,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "leftExpression": {
                            "hexValue": "31",
                            "id": 5027,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "748:1:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<<",
                          "rightExpression": {
                            "hexValue": "30783563",
                            "id": 5028,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "753:4:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_92_by_1",
                              "typeString": "int_const 92"
                            },
                            "value": "0x5c"
                          },
                          "src": "748:9:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_4951760157141521099596496896_by_1",
                            "typeString": "int_const 4951760157141521099596496896"
                          }
                        }
                      ],
                      "id": 5030,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "747:11:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_4951760157141521099596496896_by_1",
                        "typeString": "int_const 4951760157141521099596496896"
                      }
                    },
                    "src": "512:246:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_4951760157141521116776380160_by_1",
                      "typeString": "int_const 4951760157141521116776380160"
                    }
                  },
                  "visibility": "private"
                },
                {
                  "documentation": {
                    "id": 5033,
                    "nodeType": "StructuredDocumentation",
                    "src": "778:81:26",
                    "text": " @dev The `value` string doesn't fit in the specified `length`."
                  },
                  "errorSelector": "e22e27eb",
                  "id": 5039,
                  "name": "StringsInsufficientHexLength",
                  "nameLocation": "870:28:26",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 5038,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5035,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "907:5:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 5039,
                        "src": "899:13:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5034,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "899:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5037,
                        "mutability": "mutable",
                        "name": "length",
                        "nameLocation": "922:6:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 5039,
                        "src": "914:14:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5036,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "914:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "898:31:26"
                  },
                  "src": "864:66:26"
                },
                {
                  "documentation": {
                    "id": 5040,
                    "nodeType": "StructuredDocumentation",
                    "src": "936:108:26",
                    "text": " @dev The string being parsed contains characters that are not in scope of the given base."
                  },
                  "errorSelector": "94e2737e",
                  "id": 5042,
                  "name": "StringsInvalidChar",
                  "nameLocation": "1055:18:26",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 5041,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1073:2:26"
                  },
                  "src": "1049:27:26"
                },
                {
                  "documentation": {
                    "id": 5043,
                    "nodeType": "StructuredDocumentation",
                    "src": "1082:84:26",
                    "text": " @dev The string being parsed is not a properly formatted address."
                  },
                  "errorSelector": "1d15ae44",
                  "id": 5045,
                  "name": "StringsInvalidAddressFormat",
                  "nameLocation": "1177:27:26",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 5044,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1204:2:26"
                  },
                  "src": "1171:36:26"
                },
                {
                  "body": {
                    "id": 5092,
                    "nodeType": "Block",
                    "src": "1379:563:26",
                    "statements": [
                      {
                        "id": 5091,
                        "nodeType": "UncheckedBlock",
                        "src": "1389:547:26",
                        "statements": [
                          {
                            "assignments": [
                              5054
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 5054,
                                "mutability": "mutable",
                                "name": "length",
                                "nameLocation": "1421:6:26",
                                "nodeType": "VariableDeclaration",
                                "scope": 5091,
                                "src": "1413:14:26",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 5053,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "1413:7:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 5061,
                            "initialValue": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 5060,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "arguments": [
                                  {
                                    "id": 5057,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5048,
                                    "src": "1441:5:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "id": 5055,
                                    "name": "Math",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8014,
                                    "src": "1430:4:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_Math_$8014_$",
                                      "typeString": "type(library Math)"
                                    }
                                  },
                                  "id": 5056,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "1435:5:26",
                                  "memberName": "log10",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 7846,
                                  "src": "1430:10:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$",
                                    "typeString": "function (uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 5058,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1430:17:26",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "hexValue": "31",
                                "id": 5059,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1450:1:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "src": "1430:21:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "1413:38:26"
                          },
                          {
                            "assignments": [
                              5063
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 5063,
                                "mutability": "mutable",
                                "name": "buffer",
                                "nameLocation": "1479:6:26",
                                "nodeType": "VariableDeclaration",
                                "scope": 5091,
                                "src": "1465:20:26",
                                "stateVariable": false,
                                "storageLocation": "memory",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_string_memory_ptr",
                                  "typeString": "string"
                                },
                                "typeName": {
                                  "id": 5062,
                                  "name": "string",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "1465:6:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_string_storage_ptr",
                                    "typeString": "string"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 5068,
                            "initialValue": {
                              "arguments": [
                                {
                                  "id": 5066,
                                  "name": "length",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5054,
                                  "src": "1499:6:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 5065,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "NewExpression",
                                "src": "1488:10:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_string_memory_ptr_$",
                                  "typeString": "function (uint256) pure returns (string memory)"
                                },
                                "typeName": {
                                  "id": 5064,
                                  "name": "string",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "1492:6:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_string_storage_ptr",
                                    "typeString": "string"
                                  }
                                }
                              },
                              "id": 5067,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1488:18:26",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "1465:41:26"
                          },
                          {
                            "assignments": [
                              5070
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 5070,
                                "mutability": "mutable",
                                "name": "ptr",
                                "nameLocation": "1528:3:26",
                                "nodeType": "VariableDeclaration",
                                "scope": 5091,
                                "src": "1520:11:26",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 5069,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "1520:7:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 5071,
                            "nodeType": "VariableDeclarationStatement",
                            "src": "1520:11:26"
                          },
                          {
                            "AST": {
                              "nativeSrc": "1570:69:26",
                              "nodeType": "YulBlock",
                              "src": "1570:69:26",
                              "statements": [
                                {
                                  "nativeSrc": "1588:37:26",
                                  "nodeType": "YulAssignment",
                                  "src": "1588:37:26",
                                  "value": {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "buffer",
                                            "nativeSrc": "1603:6:26",
                                            "nodeType": "YulIdentifier",
                                            "src": "1603:6:26"
                                          },
                                          {
                                            "kind": "number",
                                            "nativeSrc": "1611:4:26",
                                            "nodeType": "YulLiteral",
                                            "src": "1611:4:26",
                                            "type": "",
                                            "value": "0x20"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nativeSrc": "1599:3:26",
                                          "nodeType": "YulIdentifier",
                                          "src": "1599:3:26"
                                        },
                                        "nativeSrc": "1599:17:26",
                                        "nodeType": "YulFunctionCall",
                                        "src": "1599:17:26"
                                      },
                                      {
                                        "name": "length",
                                        "nativeSrc": "1618:6:26",
                                        "nodeType": "YulIdentifier",
                                        "src": "1618:6:26"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nativeSrc": "1595:3:26",
                                      "nodeType": "YulIdentifier",
                                      "src": "1595:3:26"
                                    },
                                    "nativeSrc": "1595:30:26",
                                    "nodeType": "YulFunctionCall",
                                    "src": "1595:30:26"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "ptr",
                                      "nativeSrc": "1588:3:26",
                                      "nodeType": "YulIdentifier",
                                      "src": "1588:3:26"
                                    }
                                  ]
                                }
                              ]
                            },
                            "evmVersion": "paris",
                            "externalReferences": [
                              {
                                "declaration": 5063,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "1603:6:26",
                                "valueSize": 1
                              },
                              {
                                "declaration": 5054,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "1618:6:26",
                                "valueSize": 1
                              },
                              {
                                "declaration": 5070,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "1588:3:26",
                                "valueSize": 1
                              }
                            ],
                            "flags": [
                              "memory-safe"
                            ],
                            "id": 5072,
                            "nodeType": "InlineAssembly",
                            "src": "1545:94:26"
                          },
                          {
                            "body": {
                              "id": 5087,
                              "nodeType": "Block",
                              "src": "1665:234:26",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 5075,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "UnaryOperation",
                                    "operator": "--",
                                    "prefix": false,
                                    "src": "1683:5:26",
                                    "subExpression": {
                                      "id": 5074,
                                      "name": "ptr",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5070,
                                      "src": "1683:3:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 5076,
                                  "nodeType": "ExpressionStatement",
                                  "src": "1683:5:26"
                                },
                                {
                                  "AST": {
                                    "nativeSrc": "1731:86:26",
                                    "nodeType": "YulBlock",
                                    "src": "1731:86:26",
                                    "statements": [
                                      {
                                        "expression": {
                                          "arguments": [
                                            {
                                              "name": "ptr",
                                              "nativeSrc": "1761:3:26",
                                              "nodeType": "YulIdentifier",
                                              "src": "1761:3:26"
                                            },
                                            {
                                              "arguments": [
                                                {
                                                  "arguments": [
                                                    {
                                                      "name": "value",
                                                      "nativeSrc": "1775:5:26",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "1775:5:26"
                                                    },
                                                    {
                                                      "kind": "number",
                                                      "nativeSrc": "1782:2:26",
                                                      "nodeType": "YulLiteral",
                                                      "src": "1782:2:26",
                                                      "type": "",
                                                      "value": "10"
                                                    }
                                                  ],
                                                  "functionName": {
                                                    "name": "mod",
                                                    "nativeSrc": "1771:3:26",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "1771:3:26"
                                                  },
                                                  "nativeSrc": "1771:14:26",
                                                  "nodeType": "YulFunctionCall",
                                                  "src": "1771:14:26"
                                                },
                                                {
                                                  "name": "HEX_DIGITS",
                                                  "nativeSrc": "1787:10:26",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "1787:10:26"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "byte",
                                                "nativeSrc": "1766:4:26",
                                                "nodeType": "YulIdentifier",
                                                "src": "1766:4:26"
                                              },
                                              "nativeSrc": "1766:32:26",
                                              "nodeType": "YulFunctionCall",
                                              "src": "1766:32:26"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mstore8",
                                            "nativeSrc": "1753:7:26",
                                            "nodeType": "YulIdentifier",
                                            "src": "1753:7:26"
                                          },
                                          "nativeSrc": "1753:46:26",
                                          "nodeType": "YulFunctionCall",
                                          "src": "1753:46:26"
                                        },
                                        "nativeSrc": "1753:46:26",
                                        "nodeType": "YulExpressionStatement",
                                        "src": "1753:46:26"
                                      }
                                    ]
                                  },
                                  "evmVersion": "paris",
                                  "externalReferences": [
                                    {
                                      "declaration": 4993,
                                      "isOffset": false,
                                      "isSlot": false,
                                      "src": "1787:10:26",
                                      "valueSize": 1
                                    },
                                    {
                                      "declaration": 5070,
                                      "isOffset": false,
                                      "isSlot": false,
                                      "src": "1761:3:26",
                                      "valueSize": 1
                                    },
                                    {
                                      "declaration": 5048,
                                      "isOffset": false,
                                      "isSlot": false,
                                      "src": "1775:5:26",
                                      "valueSize": 1
                                    }
                                  ],
                                  "flags": [
                                    "memory-safe"
                                  ],
                                  "id": 5077,
                                  "nodeType": "InlineAssembly",
                                  "src": "1706:111:26"
                                },
                                {
                                  "expression": {
                                    "id": 5080,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 5078,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5048,
                                      "src": "1834:5:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "/=",
                                    "rightHandSide": {
                                      "hexValue": "3130",
                                      "id": 5079,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "1843:2:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_10_by_1",
                                        "typeString": "int_const 10"
                                      },
                                      "value": "10"
                                    },
                                    "src": "1834:11:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 5081,
                                  "nodeType": "ExpressionStatement",
                                  "src": "1834:11:26"
                                },
                                {
                                  "condition": {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 5084,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 5082,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5048,
                                      "src": "1867:5:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "==",
                                    "rightExpression": {
                                      "hexValue": "30",
                                      "id": 5083,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "1876:1:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    },
                                    "src": "1867:10:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "id": 5086,
                                  "nodeType": "IfStatement",
                                  "src": "1863:21:26",
                                  "trueBody": {
                                    "id": 5085,
                                    "nodeType": "Break",
                                    "src": "1879:5:26"
                                  }
                                }
                              ]
                            },
                            "condition": {
                              "hexValue": "74727565",
                              "id": 5073,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "bool",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1659:4:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "value": "true"
                            },
                            "id": 5088,
                            "nodeType": "WhileStatement",
                            "src": "1652:247:26"
                          },
                          {
                            "expression": {
                              "id": 5089,
                              "name": "buffer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5063,
                              "src": "1919:6:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            },
                            "functionReturnParameters": 5052,
                            "id": 5090,
                            "nodeType": "Return",
                            "src": "1912:13:26"
                          }
                        ]
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5046,
                    "nodeType": "StructuredDocumentation",
                    "src": "1213:90:26",
                    "text": " @dev Converts a `uint256` to its ASCII `string` decimal representation."
                  },
                  "id": 5093,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toString",
                  "nameLocation": "1317:8:26",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5049,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5048,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "1334:5:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 5093,
                        "src": "1326:13:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5047,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1326:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1325:15:26"
                  },
                  "returnParameters": {
                    "id": 5052,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5051,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 5093,
                        "src": "1364:13:26",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 5050,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "1364:6:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1363:15:26"
                  },
                  "scope": 6381,
                  "src": "1308:634:26",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5118,
                    "nodeType": "Block",
                    "src": "2118:92:26",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                },
                                "id": 5106,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 5104,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5096,
                                  "src": "2149:5:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<",
                                "rightExpression": {
                                  "hexValue": "30",
                                  "id": 5105,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2157:1:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "2149:9:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseExpression": {
                                "hexValue": "",
                                "id": 5108,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "string",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2167:2:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                  "typeString": "literal_string \"\""
                                },
                                "value": ""
                              },
                              "id": 5109,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "Conditional",
                              "src": "2149:20:26",
                              "trueExpression": {
                                "hexValue": "2d",
                                "id": 5107,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "string",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2161:3:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_stringliteral_d3b8281179950f98149eefdb158d0e1acb56f56e8e343aa9fefafa7e36959561",
                                  "typeString": "literal_string \"-\""
                                },
                                "value": "-"
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "id": 5113,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5096,
                                      "src": "2195:5:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      }
                                    ],
                                    "expression": {
                                      "id": 5111,
                                      "name": "SignedMath",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 9923,
                                      "src": "2180:10:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_SignedMath_$9923_$",
                                        "typeString": "type(library SignedMath)"
                                      }
                                    },
                                    "id": 5112,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "2191:3:26",
                                    "memberName": "abs",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 9922,
                                    "src": "2180:14:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_int256_$returns$_t_uint256_$",
                                      "typeString": "function (int256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 5114,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "2180:21:26",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 5110,
                                "name": "toString",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5093,
                                "src": "2171:8:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_string_memory_ptr_$",
                                  "typeString": "function (uint256) pure returns (string memory)"
                                }
                              },
                              "id": 5115,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2171:31:26",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              },
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "expression": {
                              "id": 5102,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "2135:6:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                                "typeString": "type(string storage pointer)"
                              },
                              "typeName": {
                                "id": 5101,
                                "name": "string",
                                "nodeType": "ElementaryTypeName",
                                "src": "2135:6:26",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 5103,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "2142:6:26",
                            "memberName": "concat",
                            "nodeType": "MemberAccess",
                            "src": "2135:13:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_stringconcat_pure$__$returns$_t_string_memory_ptr_$",
                              "typeString": "function () pure returns (string memory)"
                            }
                          },
                          "id": 5116,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2135:68:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        "functionReturnParameters": 5100,
                        "id": 5117,
                        "nodeType": "Return",
                        "src": "2128:75:26"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5094,
                    "nodeType": "StructuredDocumentation",
                    "src": "1948:89:26",
                    "text": " @dev Converts a `int256` to its ASCII `string` decimal representation."
                  },
                  "id": 5119,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toStringSigned",
                  "nameLocation": "2051:14:26",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5097,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5096,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "2073:5:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 5119,
                        "src": "2066:12:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 5095,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2066:6:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2065:14:26"
                  },
                  "returnParameters": {
                    "id": 5100,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5099,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 5119,
                        "src": "2103:13:26",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 5098,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "2103:6:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2102:15:26"
                  },
                  "scope": 6381,
                  "src": "2042:168:26",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5138,
                    "nodeType": "Block",
                    "src": "2389:100:26",
                    "statements": [
                      {
                        "id": 5137,
                        "nodeType": "UncheckedBlock",
                        "src": "2399:84:26",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 5128,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5122,
                                  "src": "2442:5:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 5134,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "arguments": [
                                      {
                                        "id": 5131,
                                        "name": "value",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 5122,
                                        "src": "2461:5:26",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "expression": {
                                        "id": 5129,
                                        "name": "Math",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8014,
                                        "src": "2449:4:26",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_contract$_Math_$8014_$",
                                          "typeString": "type(library Math)"
                                        }
                                      },
                                      "id": 5130,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberLocation": "2454:6:26",
                                      "memberName": "log256",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 7957,
                                      "src": "2449:11:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$",
                                        "typeString": "function (uint256) pure returns (uint256)"
                                      }
                                    },
                                    "id": 5132,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "2449:18:26",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "+",
                                  "rightExpression": {
                                    "hexValue": "31",
                                    "id": 5133,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2470:1:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  },
                                  "src": "2449:22:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 5127,
                                "name": "toHexString",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [
                                  5139,
                                  5222,
                                  5242
                                ],
                                "referencedDeclaration": 5222,
                                "src": "2430:11:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_string_memory_ptr_$",
                                  "typeString": "function (uint256,uint256) pure returns (string memory)"
                                }
                              },
                              "id": 5135,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2430:42:26",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            },
                            "functionReturnParameters": 5126,
                            "id": 5136,
                            "nodeType": "Return",
                            "src": "2423:49:26"
                          }
                        ]
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5120,
                    "nodeType": "StructuredDocumentation",
                    "src": "2216:94:26",
                    "text": " @dev Converts a `uint256` to its ASCII `string` hexadecimal representation."
                  },
                  "id": 5139,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toHexString",
                  "nameLocation": "2324:11:26",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5123,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5122,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "2344:5:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 5139,
                        "src": "2336:13:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5121,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2336:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2335:15:26"
                  },
                  "returnParameters": {
                    "id": 5126,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5125,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 5139,
                        "src": "2374:13:26",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 5124,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "2374:6:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2373:15:26"
                  },
                  "scope": 6381,
                  "src": "2315:174:26",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5221,
                    "nodeType": "Block",
                    "src": "2702:435:26",
                    "statements": [
                      {
                        "assignments": [
                          5150
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5150,
                            "mutability": "mutable",
                            "name": "localValue",
                            "nameLocation": "2720:10:26",
                            "nodeType": "VariableDeclaration",
                            "scope": 5221,
                            "src": "2712:18:26",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5149,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "2712:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 5152,
                        "initialValue": {
                          "id": 5151,
                          "name": "value",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5142,
                          "src": "2733:5:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2712:26:26"
                      },
                      {
                        "assignments": [
                          5154
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5154,
                            "mutability": "mutable",
                            "name": "buffer",
                            "nameLocation": "2761:6:26",
                            "nodeType": "VariableDeclaration",
                            "scope": 5221,
                            "src": "2748:19:26",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 5153,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "2748:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 5163,
                        "initialValue": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 5161,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 5159,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "32",
                                  "id": 5157,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2780:1:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_2_by_1",
                                    "typeString": "int_const 2"
                                  },
                                  "value": "2"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "*",
                                "rightExpression": {
                                  "id": 5158,
                                  "name": "length",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5144,
                                  "src": "2784:6:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "2780:10:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "hexValue": "32",
                                "id": 5160,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2793:1:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_2_by_1",
                                  "typeString": "int_const 2"
                                },
                                "value": "2"
                              },
                              "src": "2780:14:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 5156,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "NewExpression",
                            "src": "2770:9:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function (uint256) pure returns (bytes memory)"
                            },
                            "typeName": {
                              "id": 5155,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "2774:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            }
                          },
                          "id": 5162,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2770:25:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2748:47:26"
                      },
                      {
                        "expression": {
                          "id": 5168,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 5164,
                              "name": "buffer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5154,
                              "src": "2805:6:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 5166,
                            "indexExpression": {
                              "hexValue": "30",
                              "id": 5165,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2812:1:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "2805:9:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes1",
                              "typeString": "bytes1"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "30",
                            "id": 5167,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2817:3:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d",
                              "typeString": "literal_string \"0\""
                            },
                            "value": "0"
                          },
                          "src": "2805:15:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes1",
                            "typeString": "bytes1"
                          }
                        },
                        "id": 5169,
                        "nodeType": "ExpressionStatement",
                        "src": "2805:15:26"
                      },
                      {
                        "expression": {
                          "id": 5174,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 5170,
                              "name": "buffer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5154,
                              "src": "2830:6:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 5172,
                            "indexExpression": {
                              "hexValue": "31",
                              "id": 5171,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2837:1:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "2830:9:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes1",
                              "typeString": "bytes1"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "78",
                            "id": 5173,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2842:3:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_7521d1cadbcfa91eec65aa16715b94ffc1c9654ba57ea2ef1a2127bca1127a83",
                              "typeString": "literal_string \"x\""
                            },
                            "value": "x"
                          },
                          "src": "2830:15:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes1",
                            "typeString": "bytes1"
                          }
                        },
                        "id": 5175,
                        "nodeType": "ExpressionStatement",
                        "src": "2830:15:26"
                      },
                      {
                        "body": {
                          "id": 5204,
                          "nodeType": "Block",
                          "src": "2900:95:26",
                          "statements": [
                            {
                              "expression": {
                                "id": 5198,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "baseExpression": {
                                    "id": 5190,
                                    "name": "buffer",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5154,
                                    "src": "2914:6:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  },
                                  "id": 5192,
                                  "indexExpression": {
                                    "id": 5191,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5177,
                                    "src": "2921:1:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "2914:9:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes1",
                                    "typeString": "bytes1"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "baseExpression": {
                                    "id": 5193,
                                    "name": "HEX_DIGITS",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4993,
                                    "src": "2926:10:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes16",
                                      "typeString": "bytes16"
                                    }
                                  },
                                  "id": 5197,
                                  "indexExpression": {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 5196,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 5194,
                                      "name": "localValue",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5150,
                                      "src": "2937:10:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "&",
                                    "rightExpression": {
                                      "hexValue": "307866",
                                      "id": 5195,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "2950:3:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_15_by_1",
                                        "typeString": "int_const 15"
                                      },
                                      "value": "0xf"
                                    },
                                    "src": "2937:16:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "2926:28:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes1",
                                    "typeString": "bytes1"
                                  }
                                },
                                "src": "2914:40:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes1",
                                  "typeString": "bytes1"
                                }
                              },
                              "id": 5199,
                              "nodeType": "ExpressionStatement",
                              "src": "2914:40:26"
                            },
                            {
                              "expression": {
                                "id": 5202,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 5200,
                                  "name": "localValue",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5150,
                                  "src": "2968:10:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": ">>=",
                                "rightHandSide": {
                                  "hexValue": "34",
                                  "id": 5201,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "2983:1:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_4_by_1",
                                    "typeString": "int_const 4"
                                  },
                                  "value": "4"
                                },
                                "src": "2968:16:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 5203,
                              "nodeType": "ExpressionStatement",
                              "src": "2968:16:26"
                            }
                          ]
                        },
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 5186,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 5184,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5177,
                            "src": "2888:1:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "hexValue": "31",
                            "id": 5185,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2892:1:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "2888:5:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 5205,
                        "initializationExpression": {
                          "assignments": [
                            5177
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 5177,
                              "mutability": "mutable",
                              "name": "i",
                              "nameLocation": "2868:1:26",
                              "nodeType": "VariableDeclaration",
                              "scope": 5205,
                              "src": "2860:9:26",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 5176,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "2860:7:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "visibility": "internal"
                            }
                          ],
                          "id": 5183,
                          "initialValue": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 5182,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 5180,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "hexValue": "32",
                                "id": 5178,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2872:1:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_2_by_1",
                                  "typeString": "int_const 2"
                                },
                                "value": "2"
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "*",
                              "rightExpression": {
                                "id": 5179,
                                "name": "length",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5144,
                                "src": "2876:6:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "2872:10:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "hexValue": "31",
                              "id": 5181,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2885:1:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "src": "2872:14:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "2860:26:26"
                        },
                        "isSimpleCounterLoop": false,
                        "loopExpression": {
                          "expression": {
                            "id": 5188,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "--",
                            "prefix": true,
                            "src": "2895:3:26",
                            "subExpression": {
                              "id": 5187,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5177,
                              "src": "2897:1:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 5189,
                          "nodeType": "ExpressionStatement",
                          "src": "2895:3:26"
                        },
                        "nodeType": "ForStatement",
                        "src": "2855:140:26"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 5208,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 5206,
                            "name": "localValue",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5150,
                            "src": "3008:10:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 5207,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3022:1:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "3008:15:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 5215,
                        "nodeType": "IfStatement",
                        "src": "3004:96:26",
                        "trueBody": {
                          "id": 5214,
                          "nodeType": "Block",
                          "src": "3025:75:26",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "id": 5210,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5142,
                                    "src": "3075:5:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "id": 5211,
                                    "name": "length",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5144,
                                    "src": "3082:6:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 5209,
                                  "name": "StringsInsufficientHexLength",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5039,
                                  "src": "3046:28:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint256_$_t_uint256_$returns$_t_error_$",
                                    "typeString": "function (uint256,uint256) pure returns (error)"
                                  }
                                },
                                "id": 5212,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3046:43:26",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 5213,
                              "nodeType": "RevertStatement",
                              "src": "3039:50:26"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 5218,
                              "name": "buffer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5154,
                              "src": "3123:6:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 5217,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3116:6:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                              "typeString": "type(string storage pointer)"
                            },
                            "typeName": {
                              "id": 5216,
                              "name": "string",
                              "nodeType": "ElementaryTypeName",
                              "src": "3116:6:26",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 5219,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3116:14:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        "functionReturnParameters": 5148,
                        "id": 5220,
                        "nodeType": "Return",
                        "src": "3109:21:26"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5140,
                    "nodeType": "StructuredDocumentation",
                    "src": "2495:112:26",
                    "text": " @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length."
                  },
                  "id": 5222,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toHexString",
                  "nameLocation": "2621:11:26",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5145,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5142,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "2641:5:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 5222,
                        "src": "2633:13:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5141,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2633:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5144,
                        "mutability": "mutable",
                        "name": "length",
                        "nameLocation": "2656:6:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 5222,
                        "src": "2648:14:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5143,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2648:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2632:31:26"
                  },
                  "returnParameters": {
                    "id": 5148,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5147,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 5222,
                        "src": "2687:13:26",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 5146,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "2687:6:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2686:15:26"
                  },
                  "scope": 6381,
                  "src": "2612:525:26",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5241,
                    "nodeType": "Block",
                    "src": "3369:75:26",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "id": 5235,
                                      "name": "addr",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5225,
                                      "src": "3414:4:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "id": 5234,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "3406:7:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint160_$",
                                      "typeString": "type(uint160)"
                                    },
                                    "typeName": {
                                      "id": 5233,
                                      "name": "uint160",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "3406:7:26",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 5236,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "3406:13:26",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint160",
                                    "typeString": "uint160"
                                  }
                                ],
                                "id": 5232,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "3398:7:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": {
                                  "id": 5231,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "3398:7:26",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 5237,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3398:22:26",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 5238,
                              "name": "ADDRESS_LENGTH",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4996,
                              "src": "3422:14:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            ],
                            "id": 5230,
                            "name": "toHexString",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              5139,
                              5222,
                              5242
                            ],
                            "referencedDeclaration": 5222,
                            "src": "3386:11:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_string_memory_ptr_$",
                              "typeString": "function (uint256,uint256) pure returns (string memory)"
                            }
                          },
                          "id": 5239,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3386:51:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        "functionReturnParameters": 5229,
                        "id": 5240,
                        "nodeType": "Return",
                        "src": "3379:58:26"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5223,
                    "nodeType": "StructuredDocumentation",
                    "src": "3143:148:26",
                    "text": " @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal\n representation."
                  },
                  "id": 5242,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toHexString",
                  "nameLocation": "3305:11:26",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5226,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5225,
                        "mutability": "mutable",
                        "name": "addr",
                        "nameLocation": "3325:4:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 5242,
                        "src": "3317:12:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5224,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3317:7:26",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3316:14:26"
                  },
                  "returnParameters": {
                    "id": 5229,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5228,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 5242,
                        "src": "3354:13:26",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 5227,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "3354:6:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3353:15:26"
                  },
                  "scope": 6381,
                  "src": "3296:148:26",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5306,
                    "nodeType": "Block",
                    "src": "3701:642:26",
                    "statements": [
                      {
                        "assignments": [
                          5251
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5251,
                            "mutability": "mutable",
                            "name": "buffer",
                            "nameLocation": "3724:6:26",
                            "nodeType": "VariableDeclaration",
                            "scope": 5306,
                            "src": "3711:19:26",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 5250,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "3711:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 5258,
                        "initialValue": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 5255,
                                  "name": "addr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5245,
                                  "src": "3751:4:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 5254,
                                "name": "toHexString",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [
                                  5139,
                                  5222,
                                  5242
                                ],
                                "referencedDeclaration": 5242,
                                "src": "3739:11:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_string_memory_ptr_$",
                                  "typeString": "function (address) pure returns (string memory)"
                                }
                              },
                              "id": 5256,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3739:17:26",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 5253,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3733:5:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                              "typeString": "type(bytes storage pointer)"
                            },
                            "typeName": {
                              "id": 5252,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "3733:5:26",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 5257,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3733:24:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3711:46:26"
                      },
                      {
                        "assignments": [
                          5260
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5260,
                            "mutability": "mutable",
                            "name": "hashValue",
                            "nameLocation": "3850:9:26",
                            "nodeType": "VariableDeclaration",
                            "scope": 5306,
                            "src": "3842:17:26",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5259,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "3842:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 5261,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3842:17:26"
                      },
                      {
                        "AST": {
                          "nativeSrc": "3894:78:26",
                          "nodeType": "YulBlock",
                          "src": "3894:78:26",
                          "statements": [
                            {
                              "nativeSrc": "3908:54:26",
                              "nodeType": "YulAssignment",
                              "src": "3908:54:26",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nativeSrc": "3925:2:26",
                                    "nodeType": "YulLiteral",
                                    "src": "3925:2:26",
                                    "type": "",
                                    "value": "96"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "buffer",
                                            "nativeSrc": "3943:6:26",
                                            "nodeType": "YulIdentifier",
                                            "src": "3943:6:26"
                                          },
                                          {
                                            "kind": "number",
                                            "nativeSrc": "3951:4:26",
                                            "nodeType": "YulLiteral",
                                            "src": "3951:4:26",
                                            "type": "",
                                            "value": "0x22"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nativeSrc": "3939:3:26",
                                          "nodeType": "YulIdentifier",
                                          "src": "3939:3:26"
                                        },
                                        "nativeSrc": "3939:17:26",
                                        "nodeType": "YulFunctionCall",
                                        "src": "3939:17:26"
                                      },
                                      {
                                        "kind": "number",
                                        "nativeSrc": "3958:2:26",
                                        "nodeType": "YulLiteral",
                                        "src": "3958:2:26",
                                        "type": "",
                                        "value": "40"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "keccak256",
                                      "nativeSrc": "3929:9:26",
                                      "nodeType": "YulIdentifier",
                                      "src": "3929:9:26"
                                    },
                                    "nativeSrc": "3929:32:26",
                                    "nodeType": "YulFunctionCall",
                                    "src": "3929:32:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nativeSrc": "3921:3:26",
                                  "nodeType": "YulIdentifier",
                                  "src": "3921:3:26"
                                },
                                "nativeSrc": "3921:41:26",
                                "nodeType": "YulFunctionCall",
                                "src": "3921:41:26"
                              },
                              "variableNames": [
                                {
                                  "name": "hashValue",
                                  "nativeSrc": "3908:9:26",
                                  "nodeType": "YulIdentifier",
                                  "src": "3908:9:26"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "paris",
                        "externalReferences": [
                          {
                            "declaration": 5251,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "3943:6:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 5260,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "3908:9:26",
                            "valueSize": 1
                          }
                        ],
                        "flags": [
                          "memory-safe"
                        ],
                        "id": 5262,
                        "nodeType": "InlineAssembly",
                        "src": "3869:103:26"
                      },
                      {
                        "body": {
                          "id": 5299,
                          "nodeType": "Block",
                          "src": "4015:291:26",
                          "statements": [
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "id": 5286,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 5277,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 5275,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 5273,
                                      "name": "hashValue",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5260,
                                      "src": "4121:9:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "&",
                                    "rightExpression": {
                                      "hexValue": "307866",
                                      "id": 5274,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "4133:3:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_15_by_1",
                                        "typeString": "int_const 15"
                                      },
                                      "value": "0xf"
                                    },
                                    "src": "4121:15:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": ">",
                                  "rightExpression": {
                                    "hexValue": "37",
                                    "id": 5276,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "4139:1:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_7_by_1",
                                      "typeString": "int_const 7"
                                    },
                                    "value": "7"
                                  },
                                  "src": "4121:19:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "&&",
                                "rightExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  },
                                  "id": 5285,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "arguments": [
                                      {
                                        "baseExpression": {
                                          "id": 5280,
                                          "name": "buffer",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 5251,
                                          "src": "4150:6:26",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                          }
                                        },
                                        "id": 5282,
                                        "indexExpression": {
                                          "id": 5281,
                                          "name": "i",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 5264,
                                          "src": "4157:1:26",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "4150:9:26",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes1",
                                          "typeString": "bytes1"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes1",
                                          "typeString": "bytes1"
                                        }
                                      ],
                                      "id": 5279,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "4144:5:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_uint8_$",
                                        "typeString": "type(uint8)"
                                      },
                                      "typeName": {
                                        "id": 5278,
                                        "name": "uint8",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4144:5:26",
                                        "typeDescriptions": {}
                                      }
                                    },
                                    "id": 5283,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "4144:16:26",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": ">",
                                  "rightExpression": {
                                    "hexValue": "3936",
                                    "id": 5284,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "4163:2:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_96_by_1",
                                      "typeString": "int_const 96"
                                    },
                                    "value": "96"
                                  },
                                  "src": "4144:21:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "src": "4121:44:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 5294,
                              "nodeType": "IfStatement",
                              "src": "4117:150:26",
                              "trueBody": {
                                "id": 5293,
                                "nodeType": "Block",
                                "src": "4167:100:26",
                                "statements": [
                                  {
                                    "expression": {
                                      "id": 5291,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "baseExpression": {
                                          "id": 5287,
                                          "name": "buffer",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 5251,
                                          "src": "4235:6:26",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                          }
                                        },
                                        "id": 5289,
                                        "indexExpression": {
                                          "id": 5288,
                                          "name": "i",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 5264,
                                          "src": "4242:1:26",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": true,
                                        "nodeType": "IndexAccess",
                                        "src": "4235:9:26",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes1",
                                          "typeString": "bytes1"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "^=",
                                      "rightHandSide": {
                                        "hexValue": "30783230",
                                        "id": 5290,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "4248:4:26",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_32_by_1",
                                          "typeString": "int_const 32"
                                        },
                                        "value": "0x20"
                                      },
                                      "src": "4235:17:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes1",
                                        "typeString": "bytes1"
                                      }
                                    },
                                    "id": 5292,
                                    "nodeType": "ExpressionStatement",
                                    "src": "4235:17:26"
                                  }
                                ]
                              }
                            },
                            {
                              "expression": {
                                "id": 5297,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 5295,
                                  "name": "hashValue",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5260,
                                  "src": "4280:9:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": ">>=",
                                "rightHandSide": {
                                  "hexValue": "34",
                                  "id": 5296,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "4294:1:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_4_by_1",
                                    "typeString": "int_const 4"
                                  },
                                  "value": "4"
                                },
                                "src": "4280:15:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 5298,
                              "nodeType": "ExpressionStatement",
                              "src": "4280:15:26"
                            }
                          ]
                        },
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 5269,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 5267,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5264,
                            "src": "4003:1:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "hexValue": "31",
                            "id": 5268,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4007:1:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "4003:5:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 5300,
                        "initializationExpression": {
                          "assignments": [
                            5264
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 5264,
                              "mutability": "mutable",
                              "name": "i",
                              "nameLocation": "3995:1:26",
                              "nodeType": "VariableDeclaration",
                              "scope": 5300,
                              "src": "3987:9:26",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 5263,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "3987:7:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "visibility": "internal"
                            }
                          ],
                          "id": 5266,
                          "initialValue": {
                            "hexValue": "3431",
                            "id": 5265,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3999:2:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_41_by_1",
                              "typeString": "int_const 41"
                            },
                            "value": "41"
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "3987:14:26"
                        },
                        "isSimpleCounterLoop": false,
                        "loopExpression": {
                          "expression": {
                            "id": 5271,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "--",
                            "prefix": true,
                            "src": "4010:3:26",
                            "subExpression": {
                              "id": 5270,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5264,
                              "src": "4012:1:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 5272,
                          "nodeType": "ExpressionStatement",
                          "src": "4010:3:26"
                        },
                        "nodeType": "ForStatement",
                        "src": "3982:324:26"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 5303,
                              "name": "buffer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5251,
                              "src": "4329:6:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 5302,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "4322:6:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                              "typeString": "type(string storage pointer)"
                            },
                            "typeName": {
                              "id": 5301,
                              "name": "string",
                              "nodeType": "ElementaryTypeName",
                              "src": "4322:6:26",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 5304,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4322:14:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        "functionReturnParameters": 5249,
                        "id": 5305,
                        "nodeType": "Return",
                        "src": "4315:21:26"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5243,
                    "nodeType": "StructuredDocumentation",
                    "src": "3450:165:26",
                    "text": " @dev Converts an `address` with fixed length of 20 bytes to its checksummed ASCII `string` hexadecimal\n representation, according to EIP-55."
                  },
                  "id": 5307,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toChecksumHexString",
                  "nameLocation": "3629:19:26",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5246,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5245,
                        "mutability": "mutable",
                        "name": "addr",
                        "nameLocation": "3657:4:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 5307,
                        "src": "3649:12:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5244,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3649:7:26",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3648:14:26"
                  },
                  "returnParameters": {
                    "id": 5249,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5248,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 5307,
                        "src": "3686:13:26",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 5247,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "3686:6:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3685:15:26"
                  },
                  "scope": 6381,
                  "src": "3620:723:26",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5343,
                    "nodeType": "Block",
                    "src": "4498:104:26",
                    "statements": [
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 5341,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 5327,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 5319,
                                    "name": "a",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5310,
                                    "src": "4521:1:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "id": 5318,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "4515:5:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                    "typeString": "type(bytes storage pointer)"
                                  },
                                  "typeName": {
                                    "id": 5317,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "4515:5:26",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 5320,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4515:8:26",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 5321,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "4524:6:26",
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "src": "4515:15:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 5324,
                                    "name": "b",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5312,
                                    "src": "4540:1:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "id": 5323,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "4534:5:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                    "typeString": "type(bytes storage pointer)"
                                  },
                                  "typeName": {
                                    "id": 5322,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "4534:5:26",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 5325,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4534:8:26",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 5326,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "4543:6:26",
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "src": "4534:15:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "4515:34:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            "id": 5340,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "id": 5331,
                                      "name": "a",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5310,
                                      "src": "4569:1:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_string_memory_ptr",
                                        "typeString": "string memory"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_string_memory_ptr",
                                        "typeString": "string memory"
                                      }
                                    ],
                                    "id": 5330,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "4563:5:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                      "typeString": "type(bytes storage pointer)"
                                    },
                                    "typeName": {
                                      "id": 5329,
                                      "name": "bytes",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "4563:5:26",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 5332,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "4563:8:26",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                ],
                                "id": 5328,
                                "name": "keccak256",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -8,
                                "src": "4553:9:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                  "typeString": "function (bytes memory) pure returns (bytes32)"
                                }
                              },
                              "id": 5333,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4553:19:26",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "id": 5337,
                                      "name": "b",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5312,
                                      "src": "4592:1:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_string_memory_ptr",
                                        "typeString": "string memory"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_string_memory_ptr",
                                        "typeString": "string memory"
                                      }
                                    ],
                                    "id": 5336,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "4586:5:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                      "typeString": "type(bytes storage pointer)"
                                    },
                                    "typeName": {
                                      "id": 5335,
                                      "name": "bytes",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "4586:5:26",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 5338,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "4586:8:26",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                ],
                                "id": 5334,
                                "name": "keccak256",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -8,
                                "src": "4576:9:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                  "typeString": "function (bytes memory) pure returns (bytes32)"
                                }
                              },
                              "id": 5339,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4576:19:26",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "src": "4553:42:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "4515:80:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 5316,
                        "id": 5342,
                        "nodeType": "Return",
                        "src": "4508:87:26"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5308,
                    "nodeType": "StructuredDocumentation",
                    "src": "4349:66:26",
                    "text": " @dev Returns true if the two strings are equal."
                  },
                  "id": 5344,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "equal",
                  "nameLocation": "4429:5:26",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5313,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5310,
                        "mutability": "mutable",
                        "name": "a",
                        "nameLocation": "4449:1:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 5344,
                        "src": "4435:15:26",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 5309,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "4435:6:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5312,
                        "mutability": "mutable",
                        "name": "b",
                        "nameLocation": "4466:1:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 5344,
                        "src": "4452:15:26",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 5311,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "4452:6:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4434:34:26"
                  },
                  "returnParameters": {
                    "id": 5316,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5315,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 5344,
                        "src": "4492:4:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 5314,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "4492:4:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4491:6:26"
                  },
                  "scope": 6381,
                  "src": "4420:182:26",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5362,
                    "nodeType": "Block",
                    "src": "4899:64:26",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 5353,
                              "name": "input",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5347,
                              "src": "4926:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            },
                            {
                              "hexValue": "30",
                              "id": 5354,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4933:1:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 5357,
                                    "name": "input",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5347,
                                    "src": "4942:5:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "id": 5356,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "4936:5:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                    "typeString": "type(bytes storage pointer)"
                                  },
                                  "typeName": {
                                    "id": 5355,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "4936:5:26",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 5358,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4936:12:26",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 5359,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "4949:6:26",
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "src": "4936:19:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              },
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 5352,
                            "name": "parseUint",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              5363,
                              5394
                            ],
                            "referencedDeclaration": 5394,
                            "src": "4916:9:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (string memory,uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 5360,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4916:40:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 5351,
                        "id": 5361,
                        "nodeType": "Return",
                        "src": "4909:47:26"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5345,
                    "nodeType": "StructuredDocumentation",
                    "src": "4608:214:26",
                    "text": " @dev Parse a decimal string and returns the value as a `uint256`.\n Requirements:\n - The string must be formatted as `[0-9]*`\n - The result must fit into an `uint256` type"
                  },
                  "id": 5363,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "parseUint",
                  "nameLocation": "4836:9:26",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5348,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5347,
                        "mutability": "mutable",
                        "name": "input",
                        "nameLocation": "4860:5:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 5363,
                        "src": "4846:19:26",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 5346,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "4846:6:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4845:21:26"
                  },
                  "returnParameters": {
                    "id": 5351,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5350,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 5363,
                        "src": "4890:7:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5349,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4890:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4889:9:26"
                  },
                  "scope": 6381,
                  "src": "4827:136:26",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5393,
                    "nodeType": "Block",
                    "src": "5368:153:26",
                    "statements": [
                      {
                        "assignments": [
                          5376,
                          5378
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5376,
                            "mutability": "mutable",
                            "name": "success",
                            "nameLocation": "5384:7:26",
                            "nodeType": "VariableDeclaration",
                            "scope": 5393,
                            "src": "5379:12:26",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 5375,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "5379:4:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 5378,
                            "mutability": "mutable",
                            "name": "value",
                            "nameLocation": "5401:5:26",
                            "nodeType": "VariableDeclaration",
                            "scope": 5393,
                            "src": "5393:13:26",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5377,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "5393:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 5384,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 5380,
                              "name": "input",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5366,
                              "src": "5423:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            },
                            {
                              "id": 5381,
                              "name": "begin",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5368,
                              "src": "5430:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 5382,
                              "name": "end",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5370,
                              "src": "5437:3:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 5379,
                            "name": "tryParseUint",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              5415,
                              5452
                            ],
                            "referencedDeclaration": 5452,
                            "src": "5410:12:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_uint256_$",
                              "typeString": "function (string memory,uint256,uint256) pure returns (bool,uint256)"
                            }
                          },
                          "id": 5383,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5410:31:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$",
                            "typeString": "tuple(bool,uint256)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "5378:63:26"
                      },
                      {
                        "condition": {
                          "id": 5386,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "5455:8:26",
                          "subExpression": {
                            "id": 5385,
                            "name": "success",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5376,
                            "src": "5456:7:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 5390,
                        "nodeType": "IfStatement",
                        "src": "5451:41:26",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 5387,
                              "name": "StringsInvalidChar",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5042,
                              "src": "5472:18:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                                "typeString": "function () pure returns (error)"
                              }
                            },
                            "id": 5388,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5472:20:26",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_error",
                              "typeString": "error"
                            }
                          },
                          "id": 5389,
                          "nodeType": "RevertStatement",
                          "src": "5465:27:26"
                        }
                      },
                      {
                        "expression": {
                          "id": 5391,
                          "name": "value",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5378,
                          "src": "5509:5:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 5374,
                        "id": 5392,
                        "nodeType": "Return",
                        "src": "5502:12:26"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5364,
                    "nodeType": "StructuredDocumentation",
                    "src": "4969:294:26",
                    "text": " @dev Variant of {parseUint-string} that parses a substring of `input` located between position `begin` (included) and\n `end` (excluded).\n Requirements:\n - The substring must be formatted as `[0-9]*`\n - The result must fit into an `uint256` type"
                  },
                  "id": 5394,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "parseUint",
                  "nameLocation": "5277:9:26",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5371,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5366,
                        "mutability": "mutable",
                        "name": "input",
                        "nameLocation": "5301:5:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 5394,
                        "src": "5287:19:26",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 5365,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "5287:6:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5368,
                        "mutability": "mutable",
                        "name": "begin",
                        "nameLocation": "5316:5:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 5394,
                        "src": "5308:13:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5367,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5308:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5370,
                        "mutability": "mutable",
                        "name": "end",
                        "nameLocation": "5331:3:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 5394,
                        "src": "5323:11:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5369,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5323:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5286:49:26"
                  },
                  "returnParameters": {
                    "id": 5374,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5373,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 5394,
                        "src": "5359:7:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5372,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5359:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5358:9:26"
                  },
                  "scope": 6381,
                  "src": "5268:253:26",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5414,
                    "nodeType": "Block",
                    "src": "5842:83:26",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 5405,
                              "name": "input",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5397,
                              "src": "5888:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            },
                            {
                              "hexValue": "30",
                              "id": 5406,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5895:1:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 5409,
                                    "name": "input",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5397,
                                    "src": "5904:5:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "id": 5408,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "5898:5:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                    "typeString": "type(bytes storage pointer)"
                                  },
                                  "typeName": {
                                    "id": 5407,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "5898:5:26",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 5410,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "5898:12:26",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 5411,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "5911:6:26",
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "src": "5898:19:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              },
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 5404,
                            "name": "_tryParseUintUncheckedBounds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5522,
                            "src": "5859:28:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_uint256_$",
                              "typeString": "function (string memory,uint256,uint256) pure returns (bool,uint256)"
                            }
                          },
                          "id": 5412,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5859:59:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$",
                            "typeString": "tuple(bool,uint256)"
                          }
                        },
                        "functionReturnParameters": 5403,
                        "id": 5413,
                        "nodeType": "Return",
                        "src": "5852:66:26"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5395,
                    "nodeType": "StructuredDocumentation",
                    "src": "5527:215:26",
                    "text": " @dev Variant of {parseUint-string} that returns false if the parsing fails because of an invalid character.\n NOTE: This function will revert if the result does not fit in a `uint256`."
                  },
                  "id": 5415,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "tryParseUint",
                  "nameLocation": "5756:12:26",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5398,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5397,
                        "mutability": "mutable",
                        "name": "input",
                        "nameLocation": "5783:5:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 5415,
                        "src": "5769:19:26",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 5396,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "5769:6:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5768:21:26"
                  },
                  "returnParameters": {
                    "id": 5403,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5400,
                        "mutability": "mutable",
                        "name": "success",
                        "nameLocation": "5818:7:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 5415,
                        "src": "5813:12:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 5399,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "5813:4:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5402,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "5835:5:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 5415,
                        "src": "5827:13:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5401,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5827:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5812:29:26"
                  },
                  "scope": 6381,
                  "src": "5747:178:26",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5451,
                    "nodeType": "Block",
                    "src": "6327:144:26",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 5439,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 5435,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 5429,
                              "name": "end",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5422,
                              "src": "6341:3:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">",
                            "rightExpression": {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 5432,
                                    "name": "input",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5418,
                                    "src": "6353:5:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "id": 5431,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "6347:5:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                    "typeString": "type(bytes storage pointer)"
                                  },
                                  "typeName": {
                                    "id": 5430,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "6347:5:26",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 5433,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "6347:12:26",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 5434,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "6360:6:26",
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "src": "6347:19:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "6341:25:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "||",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 5438,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 5436,
                              "name": "begin",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5420,
                              "src": "6370:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">",
                            "rightExpression": {
                              "id": 5437,
                              "name": "end",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5422,
                              "src": "6378:3:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "6370:11:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "6341:40:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 5444,
                        "nodeType": "IfStatement",
                        "src": "6337:63:26",
                        "trueBody": {
                          "expression": {
                            "components": [
                              {
                                "hexValue": "66616c7365",
                                "id": 5440,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "6391:5:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "false"
                              },
                              {
                                "hexValue": "30",
                                "id": 5441,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "6398:1:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "id": 5442,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "6390:10:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_bool_$_t_rational_0_by_1_$",
                              "typeString": "tuple(bool,int_const 0)"
                            }
                          },
                          "functionReturnParameters": 5428,
                          "id": 5443,
                          "nodeType": "Return",
                          "src": "6383:17:26"
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 5446,
                              "name": "input",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5418,
                              "src": "6446:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            },
                            {
                              "id": 5447,
                              "name": "begin",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5420,
                              "src": "6453:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 5448,
                              "name": "end",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5422,
                              "src": "6460:3:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 5445,
                            "name": "_tryParseUintUncheckedBounds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5522,
                            "src": "6417:28:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_uint256_$",
                              "typeString": "function (string memory,uint256,uint256) pure returns (bool,uint256)"
                            }
                          },
                          "id": 5449,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6417:47:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$",
                            "typeString": "tuple(bool,uint256)"
                          }
                        },
                        "functionReturnParameters": 5428,
                        "id": 5450,
                        "nodeType": "Return",
                        "src": "6410:54:26"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5416,
                    "nodeType": "StructuredDocumentation",
                    "src": "5931:238:26",
                    "text": " @dev Variant of {parseUint-string-uint256-uint256} that returns false if the parsing fails because of an invalid\n character.\n NOTE: This function will revert if the result does not fit in a `uint256`."
                  },
                  "id": 5452,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "tryParseUint",
                  "nameLocation": "6183:12:26",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5423,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5418,
                        "mutability": "mutable",
                        "name": "input",
                        "nameLocation": "6219:5:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 5452,
                        "src": "6205:19:26",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 5417,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "6205:6:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5420,
                        "mutability": "mutable",
                        "name": "begin",
                        "nameLocation": "6242:5:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 5452,
                        "src": "6234:13:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5419,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6234:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5422,
                        "mutability": "mutable",
                        "name": "end",
                        "nameLocation": "6265:3:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 5452,
                        "src": "6257:11:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5421,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6257:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6195:79:26"
                  },
                  "returnParameters": {
                    "id": 5428,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5425,
                        "mutability": "mutable",
                        "name": "success",
                        "nameLocation": "6303:7:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 5452,
                        "src": "6298:12:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 5424,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "6298:4:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5427,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "6320:5:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 5452,
                        "src": "6312:13:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5426,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6312:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6297:29:26"
                  },
                  "scope": 6381,
                  "src": "6174:297:26",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5521,
                    "nodeType": "Block",
                    "src": "6874:347:26",
                    "statements": [
                      {
                        "assignments": [
                          5467
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5467,
                            "mutability": "mutable",
                            "name": "buffer",
                            "nameLocation": "6897:6:26",
                            "nodeType": "VariableDeclaration",
                            "scope": 5521,
                            "src": "6884:19:26",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 5466,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "6884:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 5472,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 5470,
                              "name": "input",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5455,
                              "src": "6912:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 5469,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "6906:5:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                              "typeString": "type(bytes storage pointer)"
                            },
                            "typeName": {
                              "id": 5468,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "6906:5:26",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 5471,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6906:12:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "6884:34:26"
                      },
                      {
                        "assignments": [
                          5474
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5474,
                            "mutability": "mutable",
                            "name": "result",
                            "nameLocation": "6937:6:26",
                            "nodeType": "VariableDeclaration",
                            "scope": 5521,
                            "src": "6929:14:26",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5473,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "6929:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 5476,
                        "initialValue": {
                          "hexValue": "30",
                          "id": 5475,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "6946:1:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "6929:18:26"
                      },
                      {
                        "body": {
                          "id": 5515,
                          "nodeType": "Block",
                          "src": "6995:189:26",
                          "statements": [
                            {
                              "assignments": [
                                5488
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 5488,
                                  "mutability": "mutable",
                                  "name": "chr",
                                  "nameLocation": "7015:3:26",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 5515,
                                  "src": "7009:9:26",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  },
                                  "typeName": {
                                    "id": 5487,
                                    "name": "uint8",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "7009:5:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 5498,
                              "initialValue": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "id": 5493,
                                            "name": "buffer",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 5467,
                                            "src": "7064:6:26",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_bytes_memory_ptr",
                                              "typeString": "bytes memory"
                                            }
                                          },
                                          {
                                            "id": 5494,
                                            "name": "i",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 5478,
                                            "src": "7072:1:26",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_bytes_memory_ptr",
                                              "typeString": "bytes memory"
                                            },
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "id": 5492,
                                          "name": "_unsafeReadBytesOffset",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6380,
                                          "src": "7041:22:26",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes32_$",
                                            "typeString": "function (bytes memory,uint256) pure returns (bytes32)"
                                          }
                                        },
                                        "id": 5495,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "nameLocations": [],
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "7041:33:26",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      ],
                                      "id": 5491,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "7034:6:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_bytes1_$",
                                        "typeString": "type(bytes1)"
                                      },
                                      "typeName": {
                                        "id": 5490,
                                        "name": "bytes1",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "7034:6:26",
                                        "typeDescriptions": {}
                                      }
                                    },
                                    "id": 5496,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "7034:41:26",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes1",
                                      "typeString": "bytes1"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes1",
                                      "typeString": "bytes1"
                                    }
                                  ],
                                  "id": 5489,
                                  "name": "_tryParseChr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6202,
                                  "src": "7021:12:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_bytes1_$returns$_t_uint8_$",
                                    "typeString": "function (bytes1) pure returns (uint8)"
                                  }
                                },
                                "id": 5497,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7021:55:26",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "7009:67:26"
                            },
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                },
                                "id": 5501,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 5499,
                                  "name": "chr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5488,
                                  "src": "7094:3:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">",
                                "rightExpression": {
                                  "hexValue": "39",
                                  "id": 5500,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "7100:1:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_9_by_1",
                                    "typeString": "int_const 9"
                                  },
                                  "value": "9"
                                },
                                "src": "7094:7:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 5506,
                              "nodeType": "IfStatement",
                              "src": "7090:30:26",
                              "trueBody": {
                                "expression": {
                                  "components": [
                                    {
                                      "hexValue": "66616c7365",
                                      "id": 5502,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "bool",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "7111:5:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      },
                                      "value": "false"
                                    },
                                    {
                                      "hexValue": "30",
                                      "id": 5503,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "7118:1:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    }
                                  ],
                                  "id": 5504,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "7110:10:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_tuple$_t_bool_$_t_rational_0_by_1_$",
                                    "typeString": "tuple(bool,int_const 0)"
                                  }
                                },
                                "functionReturnParameters": 5465,
                                "id": 5505,
                                "nodeType": "Return",
                                "src": "7103:17:26"
                              }
                            },
                            {
                              "expression": {
                                "id": 5509,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 5507,
                                  "name": "result",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5474,
                                  "src": "7134:6:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "*=",
                                "rightHandSide": {
                                  "hexValue": "3130",
                                  "id": 5508,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "7144:2:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_10_by_1",
                                    "typeString": "int_const 10"
                                  },
                                  "value": "10"
                                },
                                "src": "7134:12:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 5510,
                              "nodeType": "ExpressionStatement",
                              "src": "7134:12:26"
                            },
                            {
                              "expression": {
                                "id": 5513,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 5511,
                                  "name": "result",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5474,
                                  "src": "7160:6:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "+=",
                                "rightHandSide": {
                                  "id": 5512,
                                  "name": "chr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5488,
                                  "src": "7170:3:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                "src": "7160:13:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 5514,
                              "nodeType": "ExpressionStatement",
                              "src": "7160:13:26"
                            }
                          ]
                        },
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 5483,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 5481,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5478,
                            "src": "6981:1:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "id": 5482,
                            "name": "end",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5459,
                            "src": "6985:3:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "6981:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 5516,
                        "initializationExpression": {
                          "assignments": [
                            5478
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 5478,
                              "mutability": "mutable",
                              "name": "i",
                              "nameLocation": "6970:1:26",
                              "nodeType": "VariableDeclaration",
                              "scope": 5516,
                              "src": "6962:9:26",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 5477,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "6962:7:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "visibility": "internal"
                            }
                          ],
                          "id": 5480,
                          "initialValue": {
                            "id": 5479,
                            "name": "begin",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5457,
                            "src": "6974:5:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "6962:17:26"
                        },
                        "isSimpleCounterLoop": true,
                        "loopExpression": {
                          "expression": {
                            "id": 5485,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": true,
                            "src": "6990:3:26",
                            "subExpression": {
                              "id": 5484,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5478,
                              "src": "6992:1:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 5486,
                          "nodeType": "ExpressionStatement",
                          "src": "6990:3:26"
                        },
                        "nodeType": "ForStatement",
                        "src": "6957:227:26"
                      },
                      {
                        "expression": {
                          "components": [
                            {
                              "hexValue": "74727565",
                              "id": 5517,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "bool",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "7201:4:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "value": "true"
                            },
                            {
                              "id": 5518,
                              "name": "result",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5474,
                              "src": "7207:6:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 5519,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "7200:14:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$",
                            "typeString": "tuple(bool,uint256)"
                          }
                        },
                        "functionReturnParameters": 5465,
                        "id": 5520,
                        "nodeType": "Return",
                        "src": "7193:21:26"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5453,
                    "nodeType": "StructuredDocumentation",
                    "src": "6477:224:26",
                    "text": " @dev Implementation of {tryParseUint-string-uint256-uint256} that does not check bounds. Caller should make sure that\n `begin <= end <= input.length`. Other inputs would result in undefined behavior."
                  },
                  "id": 5522,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_tryParseUintUncheckedBounds",
                  "nameLocation": "6715:28:26",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5460,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5455,
                        "mutability": "mutable",
                        "name": "input",
                        "nameLocation": "6767:5:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 5522,
                        "src": "6753:19:26",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 5454,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "6753:6:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5457,
                        "mutability": "mutable",
                        "name": "begin",
                        "nameLocation": "6790:5:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 5522,
                        "src": "6782:13:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5456,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6782:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5459,
                        "mutability": "mutable",
                        "name": "end",
                        "nameLocation": "6813:3:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 5522,
                        "src": "6805:11:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5458,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6805:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6743:79:26"
                  },
                  "returnParameters": {
                    "id": 5465,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5462,
                        "mutability": "mutable",
                        "name": "success",
                        "nameLocation": "6850:7:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 5522,
                        "src": "6845:12:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 5461,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "6845:4:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5464,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "6867:5:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 5522,
                        "src": "6859:13:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5463,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6859:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6844:29:26"
                  },
                  "scope": 6381,
                  "src": "6706:515:26",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 5540,
                    "nodeType": "Block",
                    "src": "7518:63:26",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 5531,
                              "name": "input",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5525,
                              "src": "7544:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            },
                            {
                              "hexValue": "30",
                              "id": 5532,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "7551:1:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 5535,
                                    "name": "input",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5525,
                                    "src": "7560:5:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "id": 5534,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "7554:5:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                    "typeString": "type(bytes storage pointer)"
                                  },
                                  "typeName": {
                                    "id": 5533,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "7554:5:26",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 5536,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7554:12:26",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 5537,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "7567:6:26",
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "src": "7554:19:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              },
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 5530,
                            "name": "parseInt",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              5541,
                              5572
                            ],
                            "referencedDeclaration": 5572,
                            "src": "7535:8:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_int256_$",
                              "typeString": "function (string memory,uint256,uint256) pure returns (int256)"
                            }
                          },
                          "id": 5538,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7535:39:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "functionReturnParameters": 5529,
                        "id": 5539,
                        "nodeType": "Return",
                        "src": "7528:46:26"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5523,
                    "nodeType": "StructuredDocumentation",
                    "src": "7227:216:26",
                    "text": " @dev Parse a decimal string and returns the value as a `int256`.\n Requirements:\n - The string must be formatted as `[-+]?[0-9]*`\n - The result must fit in an `int256` type."
                  },
                  "id": 5541,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "parseInt",
                  "nameLocation": "7457:8:26",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5526,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5525,
                        "mutability": "mutable",
                        "name": "input",
                        "nameLocation": "7480:5:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 5541,
                        "src": "7466:19:26",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 5524,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "7466:6:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7465:21:26"
                  },
                  "returnParameters": {
                    "id": 5529,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5528,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 5541,
                        "src": "7510:6:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 5527,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7510:6:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7509:8:26"
                  },
                  "scope": 6381,
                  "src": "7448:133:26",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5571,
                    "nodeType": "Block",
                    "src": "7986:151:26",
                    "statements": [
                      {
                        "assignments": [
                          5554,
                          5556
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5554,
                            "mutability": "mutable",
                            "name": "success",
                            "nameLocation": "8002:7:26",
                            "nodeType": "VariableDeclaration",
                            "scope": 5571,
                            "src": "7997:12:26",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 5553,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "7997:4:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 5556,
                            "mutability": "mutable",
                            "name": "value",
                            "nameLocation": "8018:5:26",
                            "nodeType": "VariableDeclaration",
                            "scope": 5571,
                            "src": "8011:12:26",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            "typeName": {
                              "id": 5555,
                              "name": "int256",
                              "nodeType": "ElementaryTypeName",
                              "src": "8011:6:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 5562,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 5558,
                              "name": "input",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5544,
                              "src": "8039:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            },
                            {
                              "id": 5559,
                              "name": "begin",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5546,
                              "src": "8046:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 5560,
                              "name": "end",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5548,
                              "src": "8053:3:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 5557,
                            "name": "tryParseInt",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              5593,
                              5635
                            ],
                            "referencedDeclaration": 5635,
                            "src": "8027:11:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_int256_$",
                              "typeString": "function (string memory,uint256,uint256) pure returns (bool,int256)"
                            }
                          },
                          "id": 5561,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8027:30:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_int256_$",
                            "typeString": "tuple(bool,int256)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "7996:61:26"
                      },
                      {
                        "condition": {
                          "id": 5564,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "8071:8:26",
                          "subExpression": {
                            "id": 5563,
                            "name": "success",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5554,
                            "src": "8072:7:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 5568,
                        "nodeType": "IfStatement",
                        "src": "8067:41:26",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 5565,
                              "name": "StringsInvalidChar",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5042,
                              "src": "8088:18:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                                "typeString": "function () pure returns (error)"
                              }
                            },
                            "id": 5566,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8088:20:26",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_error",
                              "typeString": "error"
                            }
                          },
                          "id": 5567,
                          "nodeType": "RevertStatement",
                          "src": "8081:27:26"
                        }
                      },
                      {
                        "expression": {
                          "id": 5569,
                          "name": "value",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5556,
                          "src": "8125:5:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "functionReturnParameters": 5552,
                        "id": 5570,
                        "nodeType": "Return",
                        "src": "8118:12:26"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5542,
                    "nodeType": "StructuredDocumentation",
                    "src": "7587:296:26",
                    "text": " @dev Variant of {parseInt-string} that parses a substring of `input` located between position `begin` (included) and\n `end` (excluded).\n Requirements:\n - The substring must be formatted as `[-+]?[0-9]*`\n - The result must fit in an `int256` type."
                  },
                  "id": 5572,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "parseInt",
                  "nameLocation": "7897:8:26",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5549,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5544,
                        "mutability": "mutable",
                        "name": "input",
                        "nameLocation": "7920:5:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 5572,
                        "src": "7906:19:26",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 5543,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "7906:6:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5546,
                        "mutability": "mutable",
                        "name": "begin",
                        "nameLocation": "7935:5:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 5572,
                        "src": "7927:13:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5545,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7927:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5548,
                        "mutability": "mutable",
                        "name": "end",
                        "nameLocation": "7950:3:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 5572,
                        "src": "7942:11:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5547,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7942:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7905:49:26"
                  },
                  "returnParameters": {
                    "id": 5552,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5551,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 5572,
                        "src": "7978:6:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 5550,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7978:6:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7977:8:26"
                  },
                  "scope": 6381,
                  "src": "7888:249:26",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5592,
                    "nodeType": "Block",
                    "src": "8528:82:26",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 5583,
                              "name": "input",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5575,
                              "src": "8573:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            },
                            {
                              "hexValue": "30",
                              "id": 5584,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "8580:1:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 5587,
                                    "name": "input",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5575,
                                    "src": "8589:5:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "id": 5586,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "8583:5:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                    "typeString": "type(bytes storage pointer)"
                                  },
                                  "typeName": {
                                    "id": 5585,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "8583:5:26",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 5588,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "8583:12:26",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 5589,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "8596:6:26",
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "src": "8583:19:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              },
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 5582,
                            "name": "_tryParseIntUncheckedBounds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5756,
                            "src": "8545:27:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_int256_$",
                              "typeString": "function (string memory,uint256,uint256) pure returns (bool,int256)"
                            }
                          },
                          "id": 5590,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8545:58:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_int256_$",
                            "typeString": "tuple(bool,int256)"
                          }
                        },
                        "functionReturnParameters": 5581,
                        "id": 5591,
                        "nodeType": "Return",
                        "src": "8538:65:26"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5573,
                    "nodeType": "StructuredDocumentation",
                    "src": "8143:287:26",
                    "text": " @dev Variant of {parseInt-string} that returns false if the parsing fails because of an invalid character or if\n the result does not fit in a `int256`.\n NOTE: This function will revert if the absolute value of the result does not fit in a `uint256`."
                  },
                  "id": 5593,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "tryParseInt",
                  "nameLocation": "8444:11:26",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5576,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5575,
                        "mutability": "mutable",
                        "name": "input",
                        "nameLocation": "8470:5:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 5593,
                        "src": "8456:19:26",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 5574,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "8456:6:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8455:21:26"
                  },
                  "returnParameters": {
                    "id": 5581,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5578,
                        "mutability": "mutable",
                        "name": "success",
                        "nameLocation": "8505:7:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 5593,
                        "src": "8500:12:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 5577,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "8500:4:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5580,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "8521:5:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 5593,
                        "src": "8514:12:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 5579,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8514:6:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8499:28:26"
                  },
                  "scope": 6381,
                  "src": "8435:175:26",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "id": 5598,
                  "mutability": "constant",
                  "name": "ABS_MIN_INT256",
                  "nameLocation": "8641:14:26",
                  "nodeType": "VariableDeclaration",
                  "scope": 6381,
                  "src": "8616:50:26",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5594,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8616:7:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": {
                    "commonType": {
                      "typeIdentifier": "t_rational_57896044618658097711785492504343953926634992332820282019728792003956564819968_by_1",
                      "typeString": "int_const 5789...(69 digits omitted)...9968"
                    },
                    "id": 5597,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "32",
                      "id": 5595,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "8658:1:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_2_by_1",
                        "typeString": "int_const 2"
                      },
                      "value": "2"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "**",
                    "rightExpression": {
                      "hexValue": "323535",
                      "id": 5596,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "8663:3:26",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_255_by_1",
                        "typeString": "int_const 255"
                      },
                      "value": "255"
                    },
                    "src": "8658:8:26",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_57896044618658097711785492504343953926634992332820282019728792003956564819968_by_1",
                      "typeString": "int_const 5789...(69 digits omitted)...9968"
                    }
                  },
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 5634,
                    "nodeType": "Block",
                    "src": "9132:143:26",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 5622,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 5618,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 5612,
                              "name": "end",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5605,
                              "src": "9146:3:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">",
                            "rightExpression": {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 5615,
                                    "name": "input",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5601,
                                    "src": "9158:5:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "id": 5614,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "9152:5:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                    "typeString": "type(bytes storage pointer)"
                                  },
                                  "typeName": {
                                    "id": 5613,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "9152:5:26",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 5616,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "9152:12:26",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 5617,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "9165:6:26",
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "src": "9152:19:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "9146:25:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "||",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 5621,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 5619,
                              "name": "begin",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5603,
                              "src": "9175:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">",
                            "rightExpression": {
                              "id": 5620,
                              "name": "end",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5605,
                              "src": "9183:3:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "9175:11:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "9146:40:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 5627,
                        "nodeType": "IfStatement",
                        "src": "9142:63:26",
                        "trueBody": {
                          "expression": {
                            "components": [
                              {
                                "hexValue": "66616c7365",
                                "id": 5623,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "9196:5:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "false"
                              },
                              {
                                "hexValue": "30",
                                "id": 5624,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "9203:1:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "id": 5625,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "9195:10:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_bool_$_t_rational_0_by_1_$",
                              "typeString": "tuple(bool,int_const 0)"
                            }
                          },
                          "functionReturnParameters": 5611,
                          "id": 5626,
                          "nodeType": "Return",
                          "src": "9188:17:26"
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 5629,
                              "name": "input",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5601,
                              "src": "9250:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            },
                            {
                              "id": 5630,
                              "name": "begin",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5603,
                              "src": "9257:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 5631,
                              "name": "end",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5605,
                              "src": "9264:3:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 5628,
                            "name": "_tryParseIntUncheckedBounds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5756,
                            "src": "9222:27:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_int256_$",
                              "typeString": "function (string memory,uint256,uint256) pure returns (bool,int256)"
                            }
                          },
                          "id": 5632,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9222:46:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_int256_$",
                            "typeString": "tuple(bool,int256)"
                          }
                        },
                        "functionReturnParameters": 5611,
                        "id": 5633,
                        "nodeType": "Return",
                        "src": "9215:53:26"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5599,
                    "nodeType": "StructuredDocumentation",
                    "src": "8673:303:26",
                    "text": " @dev Variant of {parseInt-string-uint256-uint256} that returns false if the parsing fails because of an invalid\n character or if the result does not fit in a `int256`.\n NOTE: This function will revert if the absolute value of the result does not fit in a `uint256`."
                  },
                  "id": 5635,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "tryParseInt",
                  "nameLocation": "8990:11:26",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5606,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5601,
                        "mutability": "mutable",
                        "name": "input",
                        "nameLocation": "9025:5:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 5635,
                        "src": "9011:19:26",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 5600,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "9011:6:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5603,
                        "mutability": "mutable",
                        "name": "begin",
                        "nameLocation": "9048:5:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 5635,
                        "src": "9040:13:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5602,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9040:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5605,
                        "mutability": "mutable",
                        "name": "end",
                        "nameLocation": "9071:3:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 5635,
                        "src": "9063:11:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5604,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9063:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "9001:79:26"
                  },
                  "returnParameters": {
                    "id": 5611,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5608,
                        "mutability": "mutable",
                        "name": "success",
                        "nameLocation": "9109:7:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 5635,
                        "src": "9104:12:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 5607,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "9104:4:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5610,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "9125:5:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 5635,
                        "src": "9118:12:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 5609,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9118:6:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "9103:28:26"
                  },
                  "scope": 6381,
                  "src": "8981:294:26",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5755,
                    "nodeType": "Block",
                    "src": "9675:812:26",
                    "statements": [
                      {
                        "assignments": [
                          5650
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5650,
                            "mutability": "mutable",
                            "name": "buffer",
                            "nameLocation": "9698:6:26",
                            "nodeType": "VariableDeclaration",
                            "scope": 5755,
                            "src": "9685:19:26",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 5649,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "9685:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 5655,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 5653,
                              "name": "input",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5638,
                              "src": "9713:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 5652,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "9707:5:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                              "typeString": "type(bytes storage pointer)"
                            },
                            "typeName": {
                              "id": 5651,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "9707:5:26",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 5654,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9707:12:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "9685:34:26"
                      },
                      {
                        "assignments": [
                          5657
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5657,
                            "mutability": "mutable",
                            "name": "sign",
                            "nameLocation": "9783:4:26",
                            "nodeType": "VariableDeclaration",
                            "scope": 5755,
                            "src": "9776:11:26",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes1",
                              "typeString": "bytes1"
                            },
                            "typeName": {
                              "id": 5656,
                              "name": "bytes1",
                              "nodeType": "ElementaryTypeName",
                              "src": "9776:6:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes1",
                                "typeString": "bytes1"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 5673,
                        "initialValue": {
                          "condition": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 5660,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 5658,
                              "name": "begin",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5640,
                              "src": "9790:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "id": 5659,
                              "name": "end",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5642,
                              "src": "9799:3:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "9790:12:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseExpression": {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "id": 5668,
                                    "name": "buffer",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5650,
                                    "src": "9847:6:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  },
                                  {
                                    "id": 5669,
                                    "name": "begin",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5640,
                                    "src": "9855:5:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 5667,
                                  "name": "_unsafeReadBytesOffset",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6380,
                                  "src": "9824:22:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes32_$",
                                    "typeString": "function (bytes memory,uint256) pure returns (bytes32)"
                                  }
                                },
                                "id": 5670,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "9824:37:26",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              ],
                              "id": 5666,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "9817:6:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes1_$",
                                "typeString": "type(bytes1)"
                              },
                              "typeName": {
                                "id": 5665,
                                "name": "bytes1",
                                "nodeType": "ElementaryTypeName",
                                "src": "9817:6:26",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 5671,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "9817:45:26",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes1",
                              "typeString": "bytes1"
                            }
                          },
                          "id": 5672,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "Conditional",
                          "src": "9790:72:26",
                          "trueExpression": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 5663,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "9812:1:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 5662,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "9805:6:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes1_$",
                                "typeString": "type(bytes1)"
                              },
                              "typeName": {
                                "id": 5661,
                                "name": "bytes1",
                                "nodeType": "ElementaryTypeName",
                                "src": "9805:6:26",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 5664,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "9805:9:26",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes1",
                              "typeString": "bytes1"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes1",
                            "typeString": "bytes1"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "9776:86:26"
                      },
                      {
                        "assignments": [
                          5675
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5675,
                            "mutability": "mutable",
                            "name": "positiveSign",
                            "nameLocation": "9948:12:26",
                            "nodeType": "VariableDeclaration",
                            "scope": 5755,
                            "src": "9943:17:26",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 5674,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "9943:4:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 5682,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_bytes1",
                            "typeString": "bytes1"
                          },
                          "id": 5681,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 5676,
                            "name": "sign",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5657,
                            "src": "9963:4:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes1",
                              "typeString": "bytes1"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "2b",
                                "id": 5679,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "string",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "9978:3:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_stringliteral_728b8dbbe730d9acd55e30e768e6a28a04bea0c61b88108287c2c87d79c98bb8",
                                  "typeString": "literal_string \"+\""
                                },
                                "value": "+"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_stringliteral_728b8dbbe730d9acd55e30e768e6a28a04bea0c61b88108287c2c87d79c98bb8",
                                  "typeString": "literal_string \"+\""
                                }
                              ],
                              "id": 5678,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "9971:6:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes1_$",
                                "typeString": "type(bytes1)"
                              },
                              "typeName": {
                                "id": 5677,
                                "name": "bytes1",
                                "nodeType": "ElementaryTypeName",
                                "src": "9971:6:26",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 5680,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "9971:11:26",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes1",
                              "typeString": "bytes1"
                            }
                          },
                          "src": "9963:19:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "9943:39:26"
                      },
                      {
                        "assignments": [
                          5684
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5684,
                            "mutability": "mutable",
                            "name": "negativeSign",
                            "nameLocation": "9997:12:26",
                            "nodeType": "VariableDeclaration",
                            "scope": 5755,
                            "src": "9992:17:26",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 5683,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "9992:4:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 5691,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_bytes1",
                            "typeString": "bytes1"
                          },
                          "id": 5690,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 5685,
                            "name": "sign",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5657,
                            "src": "10012:4:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes1",
                              "typeString": "bytes1"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "arguments": [
                              {
                                "hexValue": "2d",
                                "id": 5688,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "string",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "10027:3:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_stringliteral_d3b8281179950f98149eefdb158d0e1acb56f56e8e343aa9fefafa7e36959561",
                                  "typeString": "literal_string \"-\""
                                },
                                "value": "-"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_stringliteral_d3b8281179950f98149eefdb158d0e1acb56f56e8e343aa9fefafa7e36959561",
                                  "typeString": "literal_string \"-\""
                                }
                              ],
                              "id": 5687,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "10020:6:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes1_$",
                                "typeString": "type(bytes1)"
                              },
                              "typeName": {
                                "id": 5686,
                                "name": "bytes1",
                                "nodeType": "ElementaryTypeName",
                                "src": "10020:6:26",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 5689,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "10020:11:26",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes1",
                              "typeString": "bytes1"
                            }
                          },
                          "src": "10012:19:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "9992:39:26"
                      },
                      {
                        "assignments": [
                          5693
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5693,
                            "mutability": "mutable",
                            "name": "offset",
                            "nameLocation": "10049:6:26",
                            "nodeType": "VariableDeclaration",
                            "scope": 5755,
                            "src": "10041:14:26",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5692,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "10041:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 5700,
                        "initialValue": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "components": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "id": 5696,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 5694,
                                    "name": "positiveSign",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5675,
                                    "src": "10059:12:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "||",
                                  "rightExpression": {
                                    "id": 5695,
                                    "name": "negativeSign",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5684,
                                    "src": "10075:12:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "src": "10059:28:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                }
                              ],
                              "id": 5697,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "10058:30:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 5698,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "10089:6:26",
                            "memberName": "toUint",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 9778,
                            "src": "10058:37:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bool_$returns$_t_uint256_$attached_to$_t_bool_$",
                              "typeString": "function (bool) pure returns (uint256)"
                            }
                          },
                          "id": 5699,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10058:39:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "10041:56:26"
                      },
                      {
                        "assignments": [
                          5702,
                          5704
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5702,
                            "mutability": "mutable",
                            "name": "absSuccess",
                            "nameLocation": "10114:10:26",
                            "nodeType": "VariableDeclaration",
                            "scope": 5755,
                            "src": "10109:15:26",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 5701,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "10109:4:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 5704,
                            "mutability": "mutable",
                            "name": "absValue",
                            "nameLocation": "10134:8:26",
                            "nodeType": "VariableDeclaration",
                            "scope": 5755,
                            "src": "10126:16:26",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5703,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "10126:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 5712,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 5706,
                              "name": "input",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5638,
                              "src": "10159:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            },
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 5709,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 5707,
                                "name": "begin",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5640,
                                "src": "10166:5:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "id": 5708,
                                "name": "offset",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5693,
                                "src": "10174:6:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "10166:14:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 5710,
                              "name": "end",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5642,
                              "src": "10182:3:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 5705,
                            "name": "tryParseUint",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              5415,
                              5452
                            ],
                            "referencedDeclaration": 5452,
                            "src": "10146:12:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_uint256_$",
                              "typeString": "function (string memory,uint256,uint256) pure returns (bool,uint256)"
                            }
                          },
                          "id": 5711,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10146:40:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$",
                            "typeString": "tuple(bool,uint256)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "10108:78:26"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 5717,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 5713,
                            "name": "absSuccess",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5702,
                            "src": "10201:10:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 5716,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 5714,
                              "name": "absValue",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5704,
                              "src": "10215:8:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<",
                            "rightExpression": {
                              "id": 5715,
                              "name": "ABS_MIN_INT256",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5598,
                              "src": "10226:14:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "10215:25:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "10201:39:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "condition": {
                            "commonType": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "id": 5739,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 5735,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 5733,
                                "name": "absSuccess",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5702,
                                "src": "10343:10:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "&&",
                              "rightExpression": {
                                "id": 5734,
                                "name": "negativeSign",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5684,
                                "src": "10357:12:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "10343:26:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&&",
                            "rightExpression": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 5738,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 5736,
                                "name": "absValue",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5704,
                                "src": "10373:8:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "id": 5737,
                                "name": "ABS_MIN_INT256",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5598,
                                "src": "10385:14:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "10373:26:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "src": "10343:56:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseBody": {
                            "expression": {
                              "components": [
                                {
                                  "hexValue": "66616c7365",
                                  "id": 5749,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "bool",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "10471:5:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "value": "false"
                                },
                                {
                                  "hexValue": "30",
                                  "id": 5750,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "10478:1:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                }
                              ],
                              "id": 5751,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "10470:10:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$_t_bool_$_t_rational_0_by_1_$",
                                "typeString": "tuple(bool,int_const 0)"
                              }
                            },
                            "functionReturnParameters": 5648,
                            "id": 5752,
                            "nodeType": "Return",
                            "src": "10463:17:26"
                          },
                          "id": 5753,
                          "nodeType": "IfStatement",
                          "src": "10339:141:26",
                          "trueBody": {
                            "id": 5748,
                            "nodeType": "Block",
                            "src": "10401:56:26",
                            "statements": [
                              {
                                "expression": {
                                  "components": [
                                    {
                                      "hexValue": "74727565",
                                      "id": 5740,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "bool",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "10423:4:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      },
                                      "value": "true"
                                    },
                                    {
                                      "expression": {
                                        "arguments": [
                                          {
                                            "id": 5743,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "nodeType": "ElementaryTypeNameExpression",
                                            "src": "10434:6:26",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_type$_t_int256_$",
                                              "typeString": "type(int256)"
                                            },
                                            "typeName": {
                                              "id": 5742,
                                              "name": "int256",
                                              "nodeType": "ElementaryTypeName",
                                              "src": "10434:6:26",
                                              "typeDescriptions": {}
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_type$_t_int256_$",
                                              "typeString": "type(int256)"
                                            }
                                          ],
                                          "id": 5741,
                                          "name": "type",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": -27,
                                          "src": "10429:4:26",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                            "typeString": "function () pure"
                                          }
                                        },
                                        "id": 5744,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "nameLocations": [],
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "10429:12:26",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_meta_type_t_int256",
                                          "typeString": "type(int256)"
                                        }
                                      },
                                      "id": 5745,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "memberLocation": "10442:3:26",
                                      "memberName": "min",
                                      "nodeType": "MemberAccess",
                                      "src": "10429:16:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      }
                                    }
                                  ],
                                  "id": 5746,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "10422:24:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_tuple$_t_bool_$_t_int256_$",
                                    "typeString": "tuple(bool,int256)"
                                  }
                                },
                                "functionReturnParameters": 5648,
                                "id": 5747,
                                "nodeType": "Return",
                                "src": "10415:31:26"
                              }
                            ]
                          }
                        },
                        "id": 5754,
                        "nodeType": "IfStatement",
                        "src": "10197:283:26",
                        "trueBody": {
                          "id": 5732,
                          "nodeType": "Block",
                          "src": "10242:91:26",
                          "statements": [
                            {
                              "expression": {
                                "components": [
                                  {
                                    "hexValue": "74727565",
                                    "id": 5718,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "bool",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "10264:4:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    "value": "true"
                                  },
                                  {
                                    "condition": {
                                      "id": 5719,
                                      "name": "negativeSign",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5684,
                                      "src": "10270:12:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "falseExpression": {
                                      "arguments": [
                                        {
                                          "id": 5727,
                                          "name": "absValue",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 5704,
                                          "src": "10312:8:26",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "id": 5726,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "ElementaryTypeNameExpression",
                                        "src": "10305:6:26",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_int256_$",
                                          "typeString": "type(int256)"
                                        },
                                        "typeName": {
                                          "id": 5725,
                                          "name": "int256",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "10305:6:26",
                                          "typeDescriptions": {}
                                        }
                                      },
                                      "id": 5728,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "nameLocations": [],
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "10305:16:26",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      }
                                    },
                                    "id": 5729,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "Conditional",
                                    "src": "10270:51:26",
                                    "trueExpression": {
                                      "id": 5724,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "UnaryOperation",
                                      "operator": "-",
                                      "prefix": true,
                                      "src": "10285:17:26",
                                      "subExpression": {
                                        "arguments": [
                                          {
                                            "id": 5722,
                                            "name": "absValue",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 5704,
                                            "src": "10293:8:26",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "id": 5721,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "nodeType": "ElementaryTypeNameExpression",
                                          "src": "10286:6:26",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_int256_$",
                                            "typeString": "type(int256)"
                                          },
                                          "typeName": {
                                            "id": 5720,
                                            "name": "int256",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "10286:6:26",
                                            "typeDescriptions": {}
                                          }
                                        },
                                        "id": 5723,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "typeConversion",
                                        "lValueRequested": false,
                                        "nameLocations": [],
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "10286:16:26",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      }
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "id": 5730,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "10263:59:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_bool_$_t_int256_$",
                                  "typeString": "tuple(bool,int256)"
                                }
                              },
                              "functionReturnParameters": 5648,
                              "id": 5731,
                              "nodeType": "Return",
                              "src": "10256:66:26"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5636,
                    "nodeType": "StructuredDocumentation",
                    "src": "9281:223:26",
                    "text": " @dev Implementation of {tryParseInt-string-uint256-uint256} that does not check bounds. Caller should make sure that\n `begin <= end <= input.length`. Other inputs would result in undefined behavior."
                  },
                  "id": 5756,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_tryParseIntUncheckedBounds",
                  "nameLocation": "9518:27:26",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5643,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5638,
                        "mutability": "mutable",
                        "name": "input",
                        "nameLocation": "9569:5:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 5756,
                        "src": "9555:19:26",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 5637,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "9555:6:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5640,
                        "mutability": "mutable",
                        "name": "begin",
                        "nameLocation": "9592:5:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 5756,
                        "src": "9584:13:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5639,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9584:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5642,
                        "mutability": "mutable",
                        "name": "end",
                        "nameLocation": "9615:3:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 5756,
                        "src": "9607:11:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5641,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9607:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "9545:79:26"
                  },
                  "returnParameters": {
                    "id": 5648,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5645,
                        "mutability": "mutable",
                        "name": "success",
                        "nameLocation": "9652:7:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 5756,
                        "src": "9647:12:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 5644,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "9647:4:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5647,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "9668:5:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 5756,
                        "src": "9661:12:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 5646,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9661:6:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "9646:28:26"
                  },
                  "scope": 6381,
                  "src": "9509:978:26",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 5774,
                    "nodeType": "Block",
                    "src": "10832:67:26",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 5765,
                              "name": "input",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5759,
                              "src": "10862:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            },
                            {
                              "hexValue": "30",
                              "id": 5766,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "10869:1:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 5769,
                                    "name": "input",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5759,
                                    "src": "10878:5:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "id": 5768,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "10872:5:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                    "typeString": "type(bytes storage pointer)"
                                  },
                                  "typeName": {
                                    "id": 5767,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "10872:5:26",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 5770,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "10872:12:26",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 5771,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "10885:6:26",
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "src": "10872:19:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              },
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 5764,
                            "name": "parseHexUint",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              5775,
                              5806
                            ],
                            "referencedDeclaration": 5806,
                            "src": "10849:12:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (string memory,uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 5772,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10849:43:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 5763,
                        "id": 5773,
                        "nodeType": "Return",
                        "src": "10842:50:26"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5757,
                    "nodeType": "StructuredDocumentation",
                    "src": "10493:259:26",
                    "text": " @dev Parse a hexadecimal string (with or without \"0x\" prefix), and returns the value as a `uint256`.\n Requirements:\n - The string must be formatted as `(0x)?[0-9a-fA-F]*`\n - The result must fit in an `uint256` type."
                  },
                  "id": 5775,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "parseHexUint",
                  "nameLocation": "10766:12:26",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5760,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5759,
                        "mutability": "mutable",
                        "name": "input",
                        "nameLocation": "10793:5:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 5775,
                        "src": "10779:19:26",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 5758,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "10779:6:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "10778:21:26"
                  },
                  "returnParameters": {
                    "id": 5763,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5762,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 5775,
                        "src": "10823:7:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5761,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "10823:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "10822:9:26"
                  },
                  "scope": 6381,
                  "src": "10757:142:26",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5805,
                    "nodeType": "Block",
                    "src": "11320:156:26",
                    "statements": [
                      {
                        "assignments": [
                          5788,
                          5790
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5788,
                            "mutability": "mutable",
                            "name": "success",
                            "nameLocation": "11336:7:26",
                            "nodeType": "VariableDeclaration",
                            "scope": 5805,
                            "src": "11331:12:26",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 5787,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "11331:4:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 5790,
                            "mutability": "mutable",
                            "name": "value",
                            "nameLocation": "11353:5:26",
                            "nodeType": "VariableDeclaration",
                            "scope": 5805,
                            "src": "11345:13:26",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5789,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "11345:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 5796,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 5792,
                              "name": "input",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5778,
                              "src": "11378:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            },
                            {
                              "id": 5793,
                              "name": "begin",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5780,
                              "src": "11385:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 5794,
                              "name": "end",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5782,
                              "src": "11392:3:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 5791,
                            "name": "tryParseHexUint",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              5827,
                              5864
                            ],
                            "referencedDeclaration": 5864,
                            "src": "11362:15:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_uint256_$",
                              "typeString": "function (string memory,uint256,uint256) pure returns (bool,uint256)"
                            }
                          },
                          "id": 5795,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11362:34:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$",
                            "typeString": "tuple(bool,uint256)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "11330:66:26"
                      },
                      {
                        "condition": {
                          "id": 5798,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "11410:8:26",
                          "subExpression": {
                            "id": 5797,
                            "name": "success",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5788,
                            "src": "11411:7:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 5802,
                        "nodeType": "IfStatement",
                        "src": "11406:41:26",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 5799,
                              "name": "StringsInvalidChar",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5042,
                              "src": "11427:18:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                                "typeString": "function () pure returns (error)"
                              }
                            },
                            "id": 5800,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "11427:20:26",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_error",
                              "typeString": "error"
                            }
                          },
                          "id": 5801,
                          "nodeType": "RevertStatement",
                          "src": "11420:27:26"
                        }
                      },
                      {
                        "expression": {
                          "id": 5803,
                          "name": "value",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5790,
                          "src": "11464:5:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 5786,
                        "id": 5804,
                        "nodeType": "Return",
                        "src": "11457:12:26"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5776,
                    "nodeType": "StructuredDocumentation",
                    "src": "10905:307:26",
                    "text": " @dev Variant of {parseHexUint-string} that parses a substring of `input` located between position `begin` (included) and\n `end` (excluded).\n Requirements:\n - The substring must be formatted as `(0x)?[0-9a-fA-F]*`\n - The result must fit in an `uint256` type."
                  },
                  "id": 5806,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "parseHexUint",
                  "nameLocation": "11226:12:26",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5783,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5778,
                        "mutability": "mutable",
                        "name": "input",
                        "nameLocation": "11253:5:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 5806,
                        "src": "11239:19:26",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 5777,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "11239:6:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5780,
                        "mutability": "mutable",
                        "name": "begin",
                        "nameLocation": "11268:5:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 5806,
                        "src": "11260:13:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5779,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11260:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5782,
                        "mutability": "mutable",
                        "name": "end",
                        "nameLocation": "11283:3:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 5806,
                        "src": "11275:11:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5781,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11275:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "11238:49:26"
                  },
                  "returnParameters": {
                    "id": 5786,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5785,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 5806,
                        "src": "11311:7:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5784,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11311:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "11310:9:26"
                  },
                  "scope": 6381,
                  "src": "11217:259:26",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5826,
                    "nodeType": "Block",
                    "src": "11803:86:26",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 5817,
                              "name": "input",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5809,
                              "src": "11852:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            },
                            {
                              "hexValue": "30",
                              "id": 5818,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "11859:1:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 5821,
                                    "name": "input",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5809,
                                    "src": "11868:5:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "id": 5820,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "11862:5:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                    "typeString": "type(bytes storage pointer)"
                                  },
                                  "typeName": {
                                    "id": 5819,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "11862:5:26",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 5822,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "11862:12:26",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 5823,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "11875:6:26",
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "src": "11862:19:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              },
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 5816,
                            "name": "_tryParseHexUintUncheckedBounds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5967,
                            "src": "11820:31:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_uint256_$",
                              "typeString": "function (string memory,uint256,uint256) pure returns (bool,uint256)"
                            }
                          },
                          "id": 5824,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11820:62:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$",
                            "typeString": "tuple(bool,uint256)"
                          }
                        },
                        "functionReturnParameters": 5815,
                        "id": 5825,
                        "nodeType": "Return",
                        "src": "11813:69:26"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5807,
                    "nodeType": "StructuredDocumentation",
                    "src": "11482:218:26",
                    "text": " @dev Variant of {parseHexUint-string} that returns false if the parsing fails because of an invalid character.\n NOTE: This function will revert if the result does not fit in a `uint256`."
                  },
                  "id": 5827,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "tryParseHexUint",
                  "nameLocation": "11714:15:26",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5810,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5809,
                        "mutability": "mutable",
                        "name": "input",
                        "nameLocation": "11744:5:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 5827,
                        "src": "11730:19:26",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 5808,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "11730:6:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "11729:21:26"
                  },
                  "returnParameters": {
                    "id": 5815,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5812,
                        "mutability": "mutable",
                        "name": "success",
                        "nameLocation": "11779:7:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 5827,
                        "src": "11774:12:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 5811,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "11774:4:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5814,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "11796:5:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 5827,
                        "src": "11788:13:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5813,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11788:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "11773:29:26"
                  },
                  "scope": 6381,
                  "src": "11705:184:26",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5863,
                    "nodeType": "Block",
                    "src": "12297:147:26",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 5851,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 5847,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 5841,
                              "name": "end",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5834,
                              "src": "12311:3:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">",
                            "rightExpression": {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 5844,
                                    "name": "input",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5830,
                                    "src": "12323:5:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "id": 5843,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "12317:5:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                    "typeString": "type(bytes storage pointer)"
                                  },
                                  "typeName": {
                                    "id": 5842,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "12317:5:26",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 5845,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "12317:12:26",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 5846,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "12330:6:26",
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "src": "12317:19:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "12311:25:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "||",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 5850,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 5848,
                              "name": "begin",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5832,
                              "src": "12340:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">",
                            "rightExpression": {
                              "id": 5849,
                              "name": "end",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5834,
                              "src": "12348:3:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "12340:11:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "12311:40:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 5856,
                        "nodeType": "IfStatement",
                        "src": "12307:63:26",
                        "trueBody": {
                          "expression": {
                            "components": [
                              {
                                "hexValue": "66616c7365",
                                "id": 5852,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "12361:5:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "false"
                              },
                              {
                                "hexValue": "30",
                                "id": 5853,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "12368:1:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "id": 5854,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "12360:10:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_bool_$_t_rational_0_by_1_$",
                              "typeString": "tuple(bool,int_const 0)"
                            }
                          },
                          "functionReturnParameters": 5840,
                          "id": 5855,
                          "nodeType": "Return",
                          "src": "12353:17:26"
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 5858,
                              "name": "input",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5830,
                              "src": "12419:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            },
                            {
                              "id": 5859,
                              "name": "begin",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5832,
                              "src": "12426:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 5860,
                              "name": "end",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5834,
                              "src": "12433:3:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 5857,
                            "name": "_tryParseHexUintUncheckedBounds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5967,
                            "src": "12387:31:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_uint256_$",
                              "typeString": "function (string memory,uint256,uint256) pure returns (bool,uint256)"
                            }
                          },
                          "id": 5861,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12387:50:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$",
                            "typeString": "tuple(bool,uint256)"
                          }
                        },
                        "functionReturnParameters": 5840,
                        "id": 5862,
                        "nodeType": "Return",
                        "src": "12380:57:26"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5828,
                    "nodeType": "StructuredDocumentation",
                    "src": "11895:241:26",
                    "text": " @dev Variant of {parseHexUint-string-uint256-uint256} that returns false if the parsing fails because of an\n invalid character.\n NOTE: This function will revert if the result does not fit in a `uint256`."
                  },
                  "id": 5864,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "tryParseHexUint",
                  "nameLocation": "12150:15:26",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5835,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5830,
                        "mutability": "mutable",
                        "name": "input",
                        "nameLocation": "12189:5:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 5864,
                        "src": "12175:19:26",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 5829,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "12175:6:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5832,
                        "mutability": "mutable",
                        "name": "begin",
                        "nameLocation": "12212:5:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 5864,
                        "src": "12204:13:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5831,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "12204:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5834,
                        "mutability": "mutable",
                        "name": "end",
                        "nameLocation": "12235:3:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 5864,
                        "src": "12227:11:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5833,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "12227:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "12165:79:26"
                  },
                  "returnParameters": {
                    "id": 5840,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5837,
                        "mutability": "mutable",
                        "name": "success",
                        "nameLocation": "12273:7:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 5864,
                        "src": "12268:12:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 5836,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "12268:4:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5839,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "12290:5:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 5864,
                        "src": "12282:13:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5838,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "12282:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "12267:29:26"
                  },
                  "scope": 6381,
                  "src": "12141:303:26",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 5966,
                    "nodeType": "Block",
                    "src": "12853:881:26",
                    "statements": [
                      {
                        "assignments": [
                          5879
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5879,
                            "mutability": "mutable",
                            "name": "buffer",
                            "nameLocation": "12876:6:26",
                            "nodeType": "VariableDeclaration",
                            "scope": 5966,
                            "src": "12863:19:26",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 5878,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "12863:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 5884,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 5882,
                              "name": "input",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5867,
                              "src": "12891:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 5881,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "12885:5:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                              "typeString": "type(bytes storage pointer)"
                            },
                            "typeName": {
                              "id": 5880,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "12885:5:26",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 5883,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12885:12:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "12863:34:26"
                      },
                      {
                        "assignments": [
                          5886
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5886,
                            "mutability": "mutable",
                            "name": "hasPrefix",
                            "nameLocation": "12950:9:26",
                            "nodeType": "VariableDeclaration",
                            "scope": 5966,
                            "src": "12945:14:26",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 5885,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "12945:4:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 5906,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 5905,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "components": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 5891,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 5887,
                                  "name": "end",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5871,
                                  "src": "12963:3:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">",
                                "rightExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 5890,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 5888,
                                    "name": "begin",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5869,
                                    "src": "12969:5:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "+",
                                  "rightExpression": {
                                    "hexValue": "31",
                                    "id": 5889,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "12977:1:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  },
                                  "src": "12969:9:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "12963:15:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              }
                            ],
                            "id": 5892,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "12962:17:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_bytes2",
                              "typeString": "bytes2"
                            },
                            "id": 5904,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "id": 5896,
                                      "name": "buffer",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5879,
                                      "src": "13013:6:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes memory"
                                      }
                                    },
                                    {
                                      "id": 5897,
                                      "name": "begin",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5869,
                                      "src": "13021:5:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes memory"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 5895,
                                    "name": "_unsafeReadBytesOffset",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6380,
                                    "src": "12990:22:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes32_$",
                                      "typeString": "function (bytes memory,uint256) pure returns (bytes32)"
                                    }
                                  },
                                  "id": 5898,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "12990:37:26",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                ],
                                "id": 5894,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "12983:6:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_bytes2_$",
                                  "typeString": "type(bytes2)"
                                },
                                "typeName": {
                                  "id": 5893,
                                  "name": "bytes2",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "12983:6:26",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 5899,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "12983:45:26",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes2",
                                "typeString": "bytes2"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "arguments": [
                                {
                                  "hexValue": "3078",
                                  "id": 5902,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "string",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "13039:4:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_stringliteral_39bef1777deb3dfb14f64b9f81ced092c501fee72f90e93d03bb95ee89df9837",
                                    "typeString": "literal_string \"0x\""
                                  },
                                  "value": "0x"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_stringliteral_39bef1777deb3dfb14f64b9f81ced092c501fee72f90e93d03bb95ee89df9837",
                                    "typeString": "literal_string \"0x\""
                                  }
                                ],
                                "id": 5901,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "13032:6:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_bytes2_$",
                                  "typeString": "type(bytes2)"
                                },
                                "typeName": {
                                  "id": 5900,
                                  "name": "bytes2",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "13032:6:26",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 5903,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "13032:12:26",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes2",
                                "typeString": "bytes2"
                              }
                            },
                            "src": "12983:61:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "12962:82:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "12945:99:26"
                      },
                      {
                        "assignments": [
                          5908
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5908,
                            "mutability": "mutable",
                            "name": "offset",
                            "nameLocation": "13133:6:26",
                            "nodeType": "VariableDeclaration",
                            "scope": 5966,
                            "src": "13125:14:26",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5907,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "13125:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 5914,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 5913,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "id": 5909,
                                "name": "hasPrefix",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5886,
                                "src": "13142:9:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 5910,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "13152:6:26",
                              "memberName": "toUint",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 9778,
                              "src": "13142:16:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bool_$returns$_t_uint256_$attached_to$_t_bool_$",
                                "typeString": "function (bool) pure returns (uint256)"
                              }
                            },
                            "id": 5911,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "13142:18:26",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "*",
                          "rightExpression": {
                            "hexValue": "32",
                            "id": 5912,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "13163:1:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_2_by_1",
                              "typeString": "int_const 2"
                            },
                            "value": "2"
                          },
                          "src": "13142:22:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "13125:39:26"
                      },
                      {
                        "assignments": [
                          5916
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5916,
                            "mutability": "mutable",
                            "name": "result",
                            "nameLocation": "13183:6:26",
                            "nodeType": "VariableDeclaration",
                            "scope": 5966,
                            "src": "13175:14:26",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5915,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "13175:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 5918,
                        "initialValue": {
                          "hexValue": "30",
                          "id": 5917,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "13192:1:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "13175:18:26"
                      },
                      {
                        "body": {
                          "id": 5960,
                          "nodeType": "Block",
                          "src": "13250:447:26",
                          "statements": [
                            {
                              "assignments": [
                                5932
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 5932,
                                  "mutability": "mutable",
                                  "name": "chr",
                                  "nameLocation": "13270:3:26",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 5960,
                                  "src": "13264:9:26",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  },
                                  "typeName": {
                                    "id": 5931,
                                    "name": "uint8",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "13264:5:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 5942,
                              "initialValue": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "id": 5937,
                                            "name": "buffer",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 5879,
                                            "src": "13319:6:26",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_bytes_memory_ptr",
                                              "typeString": "bytes memory"
                                            }
                                          },
                                          {
                                            "id": 5938,
                                            "name": "i",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 5920,
                                            "src": "13327:1:26",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_bytes_memory_ptr",
                                              "typeString": "bytes memory"
                                            },
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "id": 5936,
                                          "name": "_unsafeReadBytesOffset",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6380,
                                          "src": "13296:22:26",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes32_$",
                                            "typeString": "function (bytes memory,uint256) pure returns (bytes32)"
                                          }
                                        },
                                        "id": 5939,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "nameLocations": [],
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "13296:33:26",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      ],
                                      "id": 5935,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "13289:6:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_bytes1_$",
                                        "typeString": "type(bytes1)"
                                      },
                                      "typeName": {
                                        "id": 5934,
                                        "name": "bytes1",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "13289:6:26",
                                        "typeDescriptions": {}
                                      }
                                    },
                                    "id": 5940,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "13289:41:26",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes1",
                                      "typeString": "bytes1"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes1",
                                      "typeString": "bytes1"
                                    }
                                  ],
                                  "id": 5933,
                                  "name": "_tryParseChr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6202,
                                  "src": "13276:12:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_bytes1_$returns$_t_uint8_$",
                                    "typeString": "function (bytes1) pure returns (uint8)"
                                  }
                                },
                                "id": 5941,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "13276:55:26",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "13264:67:26"
                            },
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                },
                                "id": 5945,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 5943,
                                  "name": "chr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5932,
                                  "src": "13349:3:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">",
                                "rightExpression": {
                                  "hexValue": "3135",
                                  "id": 5944,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "13355:2:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_15_by_1",
                                    "typeString": "int_const 15"
                                  },
                                  "value": "15"
                                },
                                "src": "13349:8:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 5950,
                              "nodeType": "IfStatement",
                              "src": "13345:31:26",
                              "trueBody": {
                                "expression": {
                                  "components": [
                                    {
                                      "hexValue": "66616c7365",
                                      "id": 5946,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "bool",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "13367:5:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      },
                                      "value": "false"
                                    },
                                    {
                                      "hexValue": "30",
                                      "id": 5947,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "13374:1:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    }
                                  ],
                                  "id": 5948,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "13366:10:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_tuple$_t_bool_$_t_rational_0_by_1_$",
                                    "typeString": "tuple(bool,int_const 0)"
                                  }
                                },
                                "functionReturnParameters": 5877,
                                "id": 5949,
                                "nodeType": "Return",
                                "src": "13359:17:26"
                              }
                            },
                            {
                              "expression": {
                                "id": 5953,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 5951,
                                  "name": "result",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5916,
                                  "src": "13390:6:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "*=",
                                "rightHandSide": {
                                  "hexValue": "3136",
                                  "id": 5952,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "13400:2:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_16_by_1",
                                    "typeString": "int_const 16"
                                  },
                                  "value": "16"
                                },
                                "src": "13390:12:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 5954,
                              "nodeType": "ExpressionStatement",
                              "src": "13390:12:26"
                            },
                            {
                              "id": 5959,
                              "nodeType": "UncheckedBlock",
                              "src": "13416:271:26",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 5957,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 5955,
                                      "name": "result",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5916,
                                      "src": "13659:6:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "+=",
                                    "rightHandSide": {
                                      "id": 5956,
                                      "name": "chr",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5932,
                                      "src": "13669:3:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint8",
                                        "typeString": "uint8"
                                      }
                                    },
                                    "src": "13659:13:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 5958,
                                  "nodeType": "ExpressionStatement",
                                  "src": "13659:13:26"
                                }
                              ]
                            }
                          ]
                        },
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 5927,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 5925,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5920,
                            "src": "13236:1:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "id": 5926,
                            "name": "end",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5871,
                            "src": "13240:3:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "13236:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 5961,
                        "initializationExpression": {
                          "assignments": [
                            5920
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 5920,
                              "mutability": "mutable",
                              "name": "i",
                              "nameLocation": "13216:1:26",
                              "nodeType": "VariableDeclaration",
                              "scope": 5961,
                              "src": "13208:9:26",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 5919,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "13208:7:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "visibility": "internal"
                            }
                          ],
                          "id": 5924,
                          "initialValue": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 5923,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 5921,
                              "name": "begin",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5869,
                              "src": "13220:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "id": 5922,
                              "name": "offset",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5908,
                              "src": "13228:6:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "13220:14:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "13208:26:26"
                        },
                        "isSimpleCounterLoop": true,
                        "loopExpression": {
                          "expression": {
                            "id": 5929,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": true,
                            "src": "13245:3:26",
                            "subExpression": {
                              "id": 5928,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5920,
                              "src": "13247:1:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 5930,
                          "nodeType": "ExpressionStatement",
                          "src": "13245:3:26"
                        },
                        "nodeType": "ForStatement",
                        "src": "13203:494:26"
                      },
                      {
                        "expression": {
                          "components": [
                            {
                              "hexValue": "74727565",
                              "id": 5962,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "bool",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "13714:4:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "value": "true"
                            },
                            {
                              "id": 5963,
                              "name": "result",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5916,
                              "src": "13720:6:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 5964,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "13713:14:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$",
                            "typeString": "tuple(bool,uint256)"
                          }
                        },
                        "functionReturnParameters": 5877,
                        "id": 5965,
                        "nodeType": "Return",
                        "src": "13706:21:26"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5865,
                    "nodeType": "StructuredDocumentation",
                    "src": "12450:227:26",
                    "text": " @dev Implementation of {tryParseHexUint-string-uint256-uint256} that does not check bounds. Caller should make sure that\n `begin <= end <= input.length`. Other inputs would result in undefined behavior."
                  },
                  "id": 5967,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_tryParseHexUintUncheckedBounds",
                  "nameLocation": "12691:31:26",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5872,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5867,
                        "mutability": "mutable",
                        "name": "input",
                        "nameLocation": "12746:5:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 5967,
                        "src": "12732:19:26",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 5866,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "12732:6:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5869,
                        "mutability": "mutable",
                        "name": "begin",
                        "nameLocation": "12769:5:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 5967,
                        "src": "12761:13:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5868,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "12761:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5871,
                        "mutability": "mutable",
                        "name": "end",
                        "nameLocation": "12792:3:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 5967,
                        "src": "12784:11:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5870,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "12784:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "12722:79:26"
                  },
                  "returnParameters": {
                    "id": 5877,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5874,
                        "mutability": "mutable",
                        "name": "success",
                        "nameLocation": "12829:7:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 5967,
                        "src": "12824:12:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 5873,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "12824:4:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5876,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "12846:5:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 5967,
                        "src": "12838:13:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5875,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "12838:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "12823:29:26"
                  },
                  "scope": 6381,
                  "src": "12682:1052:26",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 5985,
                    "nodeType": "Block",
                    "src": "14032:67:26",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 5976,
                              "name": "input",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5970,
                              "src": "14062:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            },
                            {
                              "hexValue": "30",
                              "id": 5977,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "14069:1:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 5980,
                                    "name": "input",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5970,
                                    "src": "14078:5:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "id": 5979,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "14072:5:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                    "typeString": "type(bytes storage pointer)"
                                  },
                                  "typeName": {
                                    "id": 5978,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "14072:5:26",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 5981,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "14072:12:26",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 5982,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "14085:6:26",
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "src": "14072:19:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              },
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 5975,
                            "name": "parseAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              5986,
                              6017
                            ],
                            "referencedDeclaration": 6017,
                            "src": "14049:12:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_address_$",
                              "typeString": "function (string memory,uint256,uint256) pure returns (address)"
                            }
                          },
                          "id": 5983,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14049:43:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "functionReturnParameters": 5974,
                        "id": 5984,
                        "nodeType": "Return",
                        "src": "14042:50:26"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5968,
                    "nodeType": "StructuredDocumentation",
                    "src": "13740:212:26",
                    "text": " @dev Parse a hexadecimal string (with or without \"0x\" prefix), and returns the value as an `address`.\n Requirements:\n - The string must be formatted as `(0x)?[0-9a-fA-F]{40}`"
                  },
                  "id": 5986,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "parseAddress",
                  "nameLocation": "13966:12:26",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5971,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5970,
                        "mutability": "mutable",
                        "name": "input",
                        "nameLocation": "13993:5:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 5986,
                        "src": "13979:19:26",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 5969,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "13979:6:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "13978:21:26"
                  },
                  "returnParameters": {
                    "id": 5974,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5973,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 5986,
                        "src": "14023:7:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5972,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "14023:7:26",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "14022:9:26"
                  },
                  "scope": 6381,
                  "src": "13957:142:26",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 6016,
                    "nodeType": "Block",
                    "src": "14472:165:26",
                    "statements": [
                      {
                        "assignments": [
                          5999,
                          6001
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5999,
                            "mutability": "mutable",
                            "name": "success",
                            "nameLocation": "14488:7:26",
                            "nodeType": "VariableDeclaration",
                            "scope": 6016,
                            "src": "14483:12:26",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 5998,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "14483:4:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 6001,
                            "mutability": "mutable",
                            "name": "value",
                            "nameLocation": "14505:5:26",
                            "nodeType": "VariableDeclaration",
                            "scope": 6016,
                            "src": "14497:13:26",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 6000,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "14497:7:26",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 6007,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 6003,
                              "name": "input",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5989,
                              "src": "14530:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            },
                            {
                              "id": 6004,
                              "name": "begin",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5991,
                              "src": "14537:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 6005,
                              "name": "end",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5993,
                              "src": "14544:3:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 6002,
                            "name": "tryParseAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              6038,
                              6142
                            ],
                            "referencedDeclaration": 6142,
                            "src": "14514:15:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_address_$",
                              "typeString": "function (string memory,uint256,uint256) pure returns (bool,address)"
                            }
                          },
                          "id": 6006,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14514:34:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_address_$",
                            "typeString": "tuple(bool,address)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "14482:66:26"
                      },
                      {
                        "condition": {
                          "id": 6009,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "14562:8:26",
                          "subExpression": {
                            "id": 6008,
                            "name": "success",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5999,
                            "src": "14563:7:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 6013,
                        "nodeType": "IfStatement",
                        "src": "14558:50:26",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 6010,
                              "name": "StringsInvalidAddressFormat",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5045,
                              "src": "14579:27:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                                "typeString": "function () pure returns (error)"
                              }
                            },
                            "id": 6011,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "14579:29:26",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_error",
                              "typeString": "error"
                            }
                          },
                          "id": 6012,
                          "nodeType": "RevertStatement",
                          "src": "14572:36:26"
                        }
                      },
                      {
                        "expression": {
                          "id": 6014,
                          "name": "value",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6001,
                          "src": "14625:5:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "functionReturnParameters": 5997,
                        "id": 6015,
                        "nodeType": "Return",
                        "src": "14618:12:26"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 5987,
                    "nodeType": "StructuredDocumentation",
                    "src": "14105:259:26",
                    "text": " @dev Variant of {parseAddress-string} that parses a substring of `input` located between position `begin` (included) and\n `end` (excluded).\n Requirements:\n - The substring must be formatted as `(0x)?[0-9a-fA-F]{40}`"
                  },
                  "id": 6017,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "parseAddress",
                  "nameLocation": "14378:12:26",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 5994,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5989,
                        "mutability": "mutable",
                        "name": "input",
                        "nameLocation": "14405:5:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 6017,
                        "src": "14391:19:26",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 5988,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "14391:6:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5991,
                        "mutability": "mutable",
                        "name": "begin",
                        "nameLocation": "14420:5:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 6017,
                        "src": "14412:13:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5990,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "14412:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 5993,
                        "mutability": "mutable",
                        "name": "end",
                        "nameLocation": "14435:3:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 6017,
                        "src": "14427:11:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5992,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "14427:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "14390:49:26"
                  },
                  "returnParameters": {
                    "id": 5997,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 5996,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 6017,
                        "src": "14463:7:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 5995,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "14463:7:26",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "14462:9:26"
                  },
                  "scope": 6381,
                  "src": "14369:268:26",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 6037,
                    "nodeType": "Block",
                    "src": "14944:70:26",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 6028,
                              "name": "input",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6020,
                              "src": "14977:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            },
                            {
                              "hexValue": "30",
                              "id": 6029,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "14984:1:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 6032,
                                    "name": "input",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6020,
                                    "src": "14993:5:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "id": 6031,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "14987:5:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                    "typeString": "type(bytes storage pointer)"
                                  },
                                  "typeName": {
                                    "id": 6030,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "14987:5:26",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 6033,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "14987:12:26",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 6034,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "15000:6:26",
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "src": "14987:19:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              },
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 6027,
                            "name": "tryParseAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              6038,
                              6142
                            ],
                            "referencedDeclaration": 6142,
                            "src": "14961:15:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_address_$",
                              "typeString": "function (string memory,uint256,uint256) pure returns (bool,address)"
                            }
                          },
                          "id": 6035,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14961:46:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_address_$",
                            "typeString": "tuple(bool,address)"
                          }
                        },
                        "functionReturnParameters": 6026,
                        "id": 6036,
                        "nodeType": "Return",
                        "src": "14954:53:26"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 6018,
                    "nodeType": "StructuredDocumentation",
                    "src": "14643:198:26",
                    "text": " @dev Variant of {parseAddress-string} that returns false if the parsing fails because the input is not a properly\n formatted address. See {parseAddress-string} requirements."
                  },
                  "id": 6038,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "tryParseAddress",
                  "nameLocation": "14855:15:26",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 6021,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6020,
                        "mutability": "mutable",
                        "name": "input",
                        "nameLocation": "14885:5:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 6038,
                        "src": "14871:19:26",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 6019,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "14871:6:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "14870:21:26"
                  },
                  "returnParameters": {
                    "id": 6026,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6023,
                        "mutability": "mutable",
                        "name": "success",
                        "nameLocation": "14920:7:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 6038,
                        "src": "14915:12:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 6022,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "14915:4:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6025,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "14937:5:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 6038,
                        "src": "14929:13:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 6024,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "14929:7:26",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "14914:29:26"
                  },
                  "scope": 6381,
                  "src": "14846:168:26",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 6141,
                    "nodeType": "Block",
                    "src": "15407:733:26",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 6062,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 6058,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 6052,
                              "name": "end",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6045,
                              "src": "15421:3:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">",
                            "rightExpression": {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 6055,
                                    "name": "input",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6041,
                                    "src": "15433:5:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "id": 6054,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "15427:5:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                    "typeString": "type(bytes storage pointer)"
                                  },
                                  "typeName": {
                                    "id": 6053,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "15427:5:26",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 6056,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "15427:12:26",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              "id": 6057,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "15440:6:26",
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "src": "15427:19:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "15421:25:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "||",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 6061,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 6059,
                              "name": "begin",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6043,
                              "src": "15450:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": ">",
                            "rightExpression": {
                              "id": 6060,
                              "name": "end",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6045,
                              "src": "15458:3:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "15450:11:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "15421:40:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 6070,
                        "nodeType": "IfStatement",
                        "src": "15417:72:26",
                        "trueBody": {
                          "expression": {
                            "components": [
                              {
                                "hexValue": "66616c7365",
                                "id": 6063,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "15471:5:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "false"
                              },
                              {
                                "arguments": [
                                  {
                                    "hexValue": "30",
                                    "id": 6066,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "15486:1:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 6065,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "15478:7:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 6064,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "15478:7:26",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 6067,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "15478:10:26",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "id": 6068,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "15470:19:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_bool_$_t_address_$",
                              "typeString": "tuple(bool,address)"
                            }
                          },
                          "functionReturnParameters": 6051,
                          "id": 6069,
                          "nodeType": "Return",
                          "src": "15463:26:26"
                        }
                      },
                      {
                        "assignments": [
                          6072
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 6072,
                            "mutability": "mutable",
                            "name": "hasPrefix",
                            "nameLocation": "15505:9:26",
                            "nodeType": "VariableDeclaration",
                            "scope": 6141,
                            "src": "15500:14:26",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 6071,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "15500:4:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 6095,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 6094,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "components": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 6077,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 6073,
                                  "name": "end",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6045,
                                  "src": "15518:3:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">",
                                "rightExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 6076,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 6074,
                                    "name": "begin",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6043,
                                    "src": "15524:5:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "+",
                                  "rightExpression": {
                                    "hexValue": "31",
                                    "id": 6075,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "15532:1:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  },
                                  "src": "15524:9:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "15518:15:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              }
                            ],
                            "id": 6078,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "15517:17:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_bytes2",
                              "typeString": "bytes2"
                            },
                            "id": 6093,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "id": 6084,
                                          "name": "input",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6041,
                                          "src": "15574:5:26",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_string_memory_ptr",
                                            "typeString": "string memory"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_string_memory_ptr",
                                            "typeString": "string memory"
                                          }
                                        ],
                                        "id": 6083,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "ElementaryTypeNameExpression",
                                        "src": "15568:5:26",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                          "typeString": "type(bytes storage pointer)"
                                        },
                                        "typeName": {
                                          "id": 6082,
                                          "name": "bytes",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "15568:5:26",
                                          "typeDescriptions": {}
                                        }
                                      },
                                      "id": 6085,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "nameLocations": [],
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "15568:12:26",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes memory"
                                      }
                                    },
                                    {
                                      "id": 6086,
                                      "name": "begin",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6043,
                                      "src": "15582:5:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes memory"
                                      },
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 6081,
                                    "name": "_unsafeReadBytesOffset",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6380,
                                    "src": "15545:22:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes32_$",
                                      "typeString": "function (bytes memory,uint256) pure returns (bytes32)"
                                    }
                                  },
                                  "id": 6087,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "15545:43:26",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                ],
                                "id": 6080,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "15538:6:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_bytes2_$",
                                  "typeString": "type(bytes2)"
                                },
                                "typeName": {
                                  "id": 6079,
                                  "name": "bytes2",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "15538:6:26",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 6088,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "15538:51:26",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes2",
                                "typeString": "bytes2"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "arguments": [
                                {
                                  "hexValue": "3078",
                                  "id": 6091,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "string",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "15600:4:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_stringliteral_39bef1777deb3dfb14f64b9f81ced092c501fee72f90e93d03bb95ee89df9837",
                                    "typeString": "literal_string \"0x\""
                                  },
                                  "value": "0x"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_stringliteral_39bef1777deb3dfb14f64b9f81ced092c501fee72f90e93d03bb95ee89df9837",
                                    "typeString": "literal_string \"0x\""
                                  }
                                ],
                                "id": 6090,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "15593:6:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_bytes2_$",
                                  "typeString": "type(bytes2)"
                                },
                                "typeName": {
                                  "id": 6089,
                                  "name": "bytes2",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "15593:6:26",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 6092,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "15593:12:26",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes2",
                                "typeString": "bytes2"
                              }
                            },
                            "src": "15538:67:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "15517:88:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "15500:105:26"
                      },
                      {
                        "assignments": [
                          6097
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 6097,
                            "mutability": "mutable",
                            "name": "expectedLength",
                            "nameLocation": "15694:14:26",
                            "nodeType": "VariableDeclaration",
                            "scope": 6141,
                            "src": "15686:22:26",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 6096,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "15686:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 6105,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 6104,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "hexValue": "3430",
                            "id": 6098,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "15711:2:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_40_by_1",
                              "typeString": "int_const 40"
                            },
                            "value": "40"
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 6103,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "expression": {
                                  "id": 6099,
                                  "name": "hasPrefix",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6072,
                                  "src": "15716:9:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "id": 6100,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "15726:6:26",
                                "memberName": "toUint",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 9778,
                                "src": "15716:16:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_bool_$returns$_t_uint256_$attached_to$_t_bool_$",
                                  "typeString": "function (bool) pure returns (uint256)"
                                }
                              },
                              "id": 6101,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "15716:18:26",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "*",
                            "rightExpression": {
                              "hexValue": "32",
                              "id": 6102,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "15737:1:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "2"
                            },
                            "src": "15716:22:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "15711:27:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "15686:52:26"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 6110,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 6108,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 6106,
                              "name": "end",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6045,
                              "src": "15803:3:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "id": 6107,
                              "name": "begin",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6043,
                              "src": "15809:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "15803:11:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "id": 6109,
                            "name": "expectedLength",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6097,
                            "src": "15818:14:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "15803:29:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 6139,
                          "nodeType": "Block",
                          "src": "16083:51:26",
                          "statements": [
                            {
                              "expression": {
                                "components": [
                                  {
                                    "hexValue": "66616c7365",
                                    "id": 6132,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "bool",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "16105:5:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    "value": "false"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "hexValue": "30",
                                        "id": 6135,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "16120:1:26",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        }
                                      ],
                                      "id": 6134,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "16112:7:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_address_$",
                                        "typeString": "type(address)"
                                      },
                                      "typeName": {
                                        "id": 6133,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "16112:7:26",
                                        "typeDescriptions": {}
                                      }
                                    },
                                    "id": 6136,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "16112:10:26",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "id": 6137,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "16104:19:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_bool_$_t_address_$",
                                  "typeString": "tuple(bool,address)"
                                }
                              },
                              "functionReturnParameters": 6051,
                              "id": 6138,
                              "nodeType": "Return",
                              "src": "16097:26:26"
                            }
                          ]
                        },
                        "id": 6140,
                        "nodeType": "IfStatement",
                        "src": "15799:335:26",
                        "trueBody": {
                          "id": 6131,
                          "nodeType": "Block",
                          "src": "15834:243:26",
                          "statements": [
                            {
                              "assignments": [
                                6112,
                                6114
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 6112,
                                  "mutability": "mutable",
                                  "name": "s",
                                  "nameLocation": "15955:1:26",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 6131,
                                  "src": "15950:6:26",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "typeName": {
                                    "id": 6111,
                                    "name": "bool",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "15950:4:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "visibility": "internal"
                                },
                                {
                                  "constant": false,
                                  "id": 6114,
                                  "mutability": "mutable",
                                  "name": "v",
                                  "nameLocation": "15966:1:26",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 6131,
                                  "src": "15958:9:26",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 6113,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "15958:7:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 6120,
                              "initialValue": {
                                "arguments": [
                                  {
                                    "id": 6116,
                                    "name": "input",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6041,
                                    "src": "16003:5:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  },
                                  {
                                    "id": 6117,
                                    "name": "begin",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6043,
                                    "src": "16010:5:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "id": 6118,
                                    "name": "end",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6045,
                                    "src": "16017:3:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 6115,
                                  "name": "_tryParseHexUintUncheckedBounds",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5967,
                                  "src": "15971:31:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_uint256_$",
                                    "typeString": "function (string memory,uint256,uint256) pure returns (bool,uint256)"
                                  }
                                },
                                "id": 6119,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "15971:50:26",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$",
                                  "typeString": "tuple(bool,uint256)"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "15949:72:26"
                            },
                            {
                              "expression": {
                                "components": [
                                  {
                                    "id": 6121,
                                    "name": "s",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6112,
                                    "src": "16043:1:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "id": 6126,
                                            "name": "v",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6114,
                                            "src": "16062:1:26",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "id": 6125,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "nodeType": "ElementaryTypeNameExpression",
                                          "src": "16054:7:26",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_uint160_$",
                                            "typeString": "type(uint160)"
                                          },
                                          "typeName": {
                                            "id": 6124,
                                            "name": "uint160",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "16054:7:26",
                                            "typeDescriptions": {}
                                          }
                                        },
                                        "id": 6127,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "typeConversion",
                                        "lValueRequested": false,
                                        "nameLocations": [],
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "16054:10:26",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint160",
                                          "typeString": "uint160"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint160",
                                          "typeString": "uint160"
                                        }
                                      ],
                                      "id": 6123,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "16046:7:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_address_$",
                                        "typeString": "type(address)"
                                      },
                                      "typeName": {
                                        "id": 6122,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "16046:7:26",
                                        "typeDescriptions": {}
                                      }
                                    },
                                    "id": 6128,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "16046:19:26",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "id": 6129,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "16042:24:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_bool_$_t_address_$",
                                  "typeString": "tuple(bool,address)"
                                }
                              },
                              "functionReturnParameters": 6051,
                              "id": 6130,
                              "nodeType": "Return",
                              "src": "16035:31:26"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 6039,
                    "nodeType": "StructuredDocumentation",
                    "src": "15020:226:26",
                    "text": " @dev Variant of {parseAddress-string-uint256-uint256} that returns false if the parsing fails because input is not a properly\n formatted address. See {parseAddress-string-uint256-uint256} requirements."
                  },
                  "id": 6142,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "tryParseAddress",
                  "nameLocation": "15260:15:26",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 6046,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6041,
                        "mutability": "mutable",
                        "name": "input",
                        "nameLocation": "15299:5:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 6142,
                        "src": "15285:19:26",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 6040,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "15285:6:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6043,
                        "mutability": "mutable",
                        "name": "begin",
                        "nameLocation": "15322:5:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 6142,
                        "src": "15314:13:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6042,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "15314:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6045,
                        "mutability": "mutable",
                        "name": "end",
                        "nameLocation": "15345:3:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 6142,
                        "src": "15337:11:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6044,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "15337:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "15275:79:26"
                  },
                  "returnParameters": {
                    "id": 6051,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6048,
                        "mutability": "mutable",
                        "name": "success",
                        "nameLocation": "15383:7:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 6142,
                        "src": "15378:12:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 6047,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "15378:4:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6050,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "15400:5:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 6142,
                        "src": "15392:13:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 6049,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "15392:7:26",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "15377:29:26"
                  },
                  "scope": 6381,
                  "src": "15251:889:26",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 6201,
                    "nodeType": "Block",
                    "src": "16209:461:26",
                    "statements": [
                      {
                        "assignments": [
                          6150
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 6150,
                            "mutability": "mutable",
                            "name": "value",
                            "nameLocation": "16225:5:26",
                            "nodeType": "VariableDeclaration",
                            "scope": 6201,
                            "src": "16219:11:26",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            },
                            "typeName": {
                              "id": 6149,
                              "name": "uint8",
                              "nodeType": "ElementaryTypeName",
                              "src": "16219:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 6155,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 6153,
                              "name": "chr",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6144,
                              "src": "16239:3:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes1",
                                "typeString": "bytes1"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes1",
                                "typeString": "bytes1"
                              }
                            ],
                            "id": 6152,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "16233:5:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint8_$",
                              "typeString": "type(uint8)"
                            },
                            "typeName": {
                              "id": 6151,
                              "name": "uint8",
                              "nodeType": "ElementaryTypeName",
                              "src": "16233:5:26",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 6154,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16233:10:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "16219:24:26"
                      },
                      {
                        "id": 6198,
                        "nodeType": "UncheckedBlock",
                        "src": "16403:238:26",
                        "statements": [
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 6162,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                },
                                "id": 6158,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 6156,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6150,
                                  "src": "16431:5:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">",
                                "rightExpression": {
                                  "hexValue": "3437",
                                  "id": 6157,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "16439:2:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_47_by_1",
                                    "typeString": "int_const 47"
                                  },
                                  "value": "47"
                                },
                                "src": "16431:10:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "&&",
                              "rightExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                },
                                "id": 6161,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 6159,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6150,
                                  "src": "16445:5:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<",
                                "rightExpression": {
                                  "hexValue": "3538",
                                  "id": 6160,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "16453:2:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_58_by_1",
                                    "typeString": "int_const 58"
                                  },
                                  "value": "58"
                                },
                                "src": "16445:10:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "16431:24:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "falseBody": {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "id": 6173,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  },
                                  "id": 6169,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 6167,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6150,
                                    "src": "16491:5:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": ">",
                                  "rightExpression": {
                                    "hexValue": "3936",
                                    "id": 6168,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "16499:2:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_96_by_1",
                                      "typeString": "int_const 96"
                                    },
                                    "value": "96"
                                  },
                                  "src": "16491:10:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "&&",
                                "rightExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  },
                                  "id": 6172,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 6170,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6150,
                                    "src": "16505:5:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "<",
                                  "rightExpression": {
                                    "hexValue": "313033",
                                    "id": 6171,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "16513:3:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_103_by_1",
                                      "typeString": "int_const 103"
                                    },
                                    "value": "103"
                                  },
                                  "src": "16505:11:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "src": "16491:25:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": {
                                "condition": {
                                  "commonType": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "id": 6184,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "commonType": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    },
                                    "id": 6180,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 6178,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6150,
                                      "src": "16552:5:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint8",
                                        "typeString": "uint8"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": ">",
                                    "rightExpression": {
                                      "hexValue": "3634",
                                      "id": 6179,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "16560:2:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_64_by_1",
                                        "typeString": "int_const 64"
                                      },
                                      "value": "64"
                                    },
                                    "src": "16552:10:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "&&",
                                  "rightExpression": {
                                    "commonType": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    },
                                    "id": 6183,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 6181,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6150,
                                      "src": "16566:5:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint8",
                                        "typeString": "uint8"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "<",
                                    "rightExpression": {
                                      "hexValue": "3731",
                                      "id": 6182,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "16574:2:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_71_by_1",
                                        "typeString": "int_const 71"
                                      },
                                      "value": "71"
                                    },
                                    "src": "16566:10:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "src": "16552:24:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "falseBody": {
                                  "expression": {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "id": 6191,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "nodeType": "ElementaryTypeNameExpression",
                                          "src": "16620:5:26",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_uint8_$",
                                            "typeString": "type(uint8)"
                                          },
                                          "typeName": {
                                            "id": 6190,
                                            "name": "uint8",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "16620:5:26",
                                            "typeDescriptions": {}
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_type$_t_uint8_$",
                                            "typeString": "type(uint8)"
                                          }
                                        ],
                                        "id": 6189,
                                        "name": "type",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": -27,
                                        "src": "16615:4:26",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                          "typeString": "function () pure"
                                        }
                                      },
                                      "id": 6192,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "nameLocations": [],
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "16615:11:26",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_meta_type_t_uint8",
                                        "typeString": "type(uint8)"
                                      }
                                    },
                                    "id": 6193,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberLocation": "16627:3:26",
                                    "memberName": "max",
                                    "nodeType": "MemberAccess",
                                    "src": "16615:15:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  },
                                  "functionReturnParameters": 6148,
                                  "id": 6194,
                                  "nodeType": "Return",
                                  "src": "16608:22:26"
                                },
                                "id": 6195,
                                "nodeType": "IfStatement",
                                "src": "16548:82:26",
                                "trueBody": {
                                  "expression": {
                                    "id": 6187,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 6185,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6150,
                                      "src": "16578:5:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint8",
                                        "typeString": "uint8"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "-=",
                                    "rightHandSide": {
                                      "hexValue": "3535",
                                      "id": 6186,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "16587:2:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_55_by_1",
                                        "typeString": "int_const 55"
                                      },
                                      "value": "55"
                                    },
                                    "src": "16578:11:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  },
                                  "id": 6188,
                                  "nodeType": "ExpressionStatement",
                                  "src": "16578:11:26"
                                }
                              },
                              "id": 6196,
                              "nodeType": "IfStatement",
                              "src": "16487:143:26",
                              "trueBody": {
                                "expression": {
                                  "id": 6176,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftHandSide": {
                                    "id": 6174,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6150,
                                    "src": "16518:5:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  },
                                  "nodeType": "Assignment",
                                  "operator": "-=",
                                  "rightHandSide": {
                                    "hexValue": "3837",
                                    "id": 6175,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "16527:2:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_87_by_1",
                                      "typeString": "int_const 87"
                                    },
                                    "value": "87"
                                  },
                                  "src": "16518:11:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                "id": 6177,
                                "nodeType": "ExpressionStatement",
                                "src": "16518:11:26"
                              }
                            },
                            "id": 6197,
                            "nodeType": "IfStatement",
                            "src": "16427:203:26",
                            "trueBody": {
                              "expression": {
                                "id": 6165,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 6163,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6150,
                                  "src": "16457:5:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "-=",
                                "rightHandSide": {
                                  "hexValue": "3438",
                                  "id": 6164,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "16466:2:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_48_by_1",
                                    "typeString": "int_const 48"
                                  },
                                  "value": "48"
                                },
                                "src": "16457:11:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "id": 6166,
                              "nodeType": "ExpressionStatement",
                              "src": "16457:11:26"
                            }
                          }
                        ]
                      },
                      {
                        "expression": {
                          "id": 6199,
                          "name": "value",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6150,
                          "src": "16658:5:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "functionReturnParameters": 6148,
                        "id": 6200,
                        "nodeType": "Return",
                        "src": "16651:12:26"
                      }
                    ]
                  },
                  "id": 6202,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_tryParseChr",
                  "nameLocation": "16155:12:26",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 6145,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6144,
                        "mutability": "mutable",
                        "name": "chr",
                        "nameLocation": "16175:3:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 6202,
                        "src": "16168:10:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes1",
                          "typeString": "bytes1"
                        },
                        "typeName": {
                          "id": 6143,
                          "name": "bytes1",
                          "nodeType": "ElementaryTypeName",
                          "src": "16168:6:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes1",
                            "typeString": "bytes1"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "16167:12:26"
                  },
                  "returnParameters": {
                    "id": 6148,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6147,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 6202,
                        "src": "16202:5:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 6146,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "16202:5:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "16201:7:26"
                  },
                  "scope": 6381,
                  "src": "16146:524:26",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 6367,
                    "nodeType": "Block",
                    "src": "17336:1331:26",
                    "statements": [
                      {
                        "assignments": [
                          6211
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 6211,
                            "mutability": "mutable",
                            "name": "buffer",
                            "nameLocation": "17359:6:26",
                            "nodeType": "VariableDeclaration",
                            "scope": 6367,
                            "src": "17346:19:26",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 6210,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "17346:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 6216,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 6214,
                              "name": "input",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6205,
                              "src": "17374:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 6213,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "17368:5:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                              "typeString": "type(bytes storage pointer)"
                            },
                            "typeName": {
                              "id": 6212,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "17368:5:26",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 6215,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "17368:12:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "17346:34:26"
                      },
                      {
                        "assignments": [
                          6218
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 6218,
                            "mutability": "mutable",
                            "name": "output",
                            "nameLocation": "17403:6:26",
                            "nodeType": "VariableDeclaration",
                            "scope": 6367,
                            "src": "17390:19:26",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 6217,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "17390:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 6226,
                        "initialValue": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 6224,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "hexValue": "32",
                                "id": 6221,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "17422:1:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_2_by_1",
                                  "typeString": "int_const 2"
                                },
                                "value": "2"
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "*",
                              "rightExpression": {
                                "expression": {
                                  "id": 6222,
                                  "name": "buffer",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6211,
                                  "src": "17426:6:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                },
                                "id": 6223,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "17433:6:26",
                                "memberName": "length",
                                "nodeType": "MemberAccess",
                                "src": "17426:13:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "17422:17:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 6220,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "NewExpression",
                            "src": "17412:9:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$",
                              "typeString": "function (uint256) pure returns (bytes memory)"
                            },
                            "typeName": {
                              "id": 6219,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "17416:5:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            }
                          },
                          "id": 6225,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "17412:28:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "17390:50:26"
                      },
                      {
                        "assignments": [
                          6228
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 6228,
                            "mutability": "mutable",
                            "name": "outputLength",
                            "nameLocation": "17481:12:26",
                            "nodeType": "VariableDeclaration",
                            "scope": 6367,
                            "src": "17473:20:26",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 6227,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "17473:7:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 6230,
                        "initialValue": {
                          "hexValue": "30",
                          "id": 6229,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "17496:1:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "17473:24:26"
                      },
                      {
                        "body": {
                          "id": 6359,
                          "nodeType": "Block",
                          "src": "17548:854:26",
                          "statements": [
                            {
                              "assignments": [
                                6242
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 6242,
                                  "mutability": "mutable",
                                  "name": "char",
                                  "nameLocation": "17569:4:26",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 6359,
                                  "src": "17562:11:26",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes1",
                                    "typeString": "bytes1"
                                  },
                                  "typeName": {
                                    "id": 6241,
                                    "name": "bytes1",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "17562:6:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes1",
                                      "typeString": "bytes1"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 6250,
                              "initialValue": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "id": 6246,
                                        "name": "buffer",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6211,
                                        "src": "17606:6:26",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      },
                                      {
                                        "id": 6247,
                                        "name": "i",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6232,
                                        "src": "17614:1:26",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "id": 6245,
                                      "name": "_unsafeReadBytesOffset",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6380,
                                      "src": "17583:22:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes32_$",
                                        "typeString": "function (bytes memory,uint256) pure returns (bytes32)"
                                      }
                                    },
                                    "id": 6248,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "17583:33:26",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  ],
                                  "id": 6244,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "17576:6:26",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_bytes1_$",
                                    "typeString": "type(bytes1)"
                                  },
                                  "typeName": {
                                    "id": 6243,
                                    "name": "bytes1",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "17576:6:26",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 6249,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "17576:41:26",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes1",
                                  "typeString": "bytes1"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "17562:55:26"
                            },
                            {
                              "condition": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 6262,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "components": [
                                        {
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 6259,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "id": 6251,
                                            "name": "SPECIAL_CHARS_LOOKUP",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 5032,
                                            "src": "17637:20:26",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "&",
                                          "rightExpression": {
                                            "components": [
                                              {
                                                "commonType": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                },
                                                "id": 6257,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                  "hexValue": "31",
                                                  "id": 6252,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "kind": "number",
                                                  "lValueRequested": false,
                                                  "nodeType": "Literal",
                                                  "src": "17661:1:26",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_rational_1_by_1",
                                                    "typeString": "int_const 1"
                                                  },
                                                  "value": "1"
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "<<",
                                                "rightExpression": {
                                                  "arguments": [
                                                    {
                                                      "id": 6255,
                                                      "name": "char",
                                                      "nodeType": "Identifier",
                                                      "overloadedDeclarations": [],
                                                      "referencedDeclaration": 6242,
                                                      "src": "17672:4:26",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes1",
                                                        "typeString": "bytes1"
                                                      }
                                                    }
                                                  ],
                                                  "expression": {
                                                    "argumentTypes": [
                                                      {
                                                        "typeIdentifier": "t_bytes1",
                                                        "typeString": "bytes1"
                                                      }
                                                    ],
                                                    "id": 6254,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "nodeType": "ElementaryTypeNameExpression",
                                                    "src": "17666:5:26",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_type$_t_uint8_$",
                                                      "typeString": "type(uint8)"
                                                    },
                                                    "typeName": {
                                                      "id": 6253,
                                                      "name": "uint8",
                                                      "nodeType": "ElementaryTypeName",
                                                      "src": "17666:5:26",
                                                      "typeDescriptions": {}
                                                    }
                                                  },
                                                  "id": 6256,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "kind": "typeConversion",
                                                  "lValueRequested": false,
                                                  "nameLocations": [],
                                                  "names": [],
                                                  "nodeType": "FunctionCall",
                                                  "src": "17666:11:26",
                                                  "tryCall": false,
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_uint8",
                                                    "typeString": "uint8"
                                                  }
                                                },
                                                "src": "17661:16:26",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              }
                                            ],
                                            "id": 6258,
                                            "isConstant": false,
                                            "isInlineArray": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "TupleExpression",
                                            "src": "17660:18:26",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "src": "17637:41:26",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "id": 6260,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "TupleExpression",
                                      "src": "17636:43:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "!=",
                                    "rightExpression": {
                                      "hexValue": "30",
                                      "id": 6261,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "17683:1:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    },
                                    "src": "17636:48:26",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  }
                                ],
                                "id": 6263,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "17635:50:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": {
                                "id": 6357,
                                "nodeType": "Block",
                                "src": "18330:62:26",
                                "statements": [
                                  {
                                    "expression": {
                                      "id": 6355,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "baseExpression": {
                                          "id": 6350,
                                          "name": "output",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6218,
                                          "src": "18348:6:26",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                          }
                                        },
                                        "id": 6353,
                                        "indexExpression": {
                                          "id": 6352,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "UnaryOperation",
                                          "operator": "++",
                                          "prefix": false,
                                          "src": "18355:14:26",
                                          "subExpression": {
                                            "id": 6351,
                                            "name": "outputLength",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6228,
                                            "src": "18355:12:26",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": true,
                                        "nodeType": "IndexAccess",
                                        "src": "18348:22:26",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes1",
                                          "typeString": "bytes1"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "id": 6354,
                                        "name": "char",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6242,
                                        "src": "18373:4:26",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes1",
                                          "typeString": "bytes1"
                                        }
                                      },
                                      "src": "18348:29:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes1",
                                        "typeString": "bytes1"
                                      }
                                    },
                                    "id": 6356,
                                    "nodeType": "ExpressionStatement",
                                    "src": "18348:29:26"
                                  }
                                ]
                              },
                              "id": 6358,
                              "nodeType": "IfStatement",
                              "src": "17631:761:26",
                              "trueBody": {
                                "id": 6349,
                                "nodeType": "Block",
                                "src": "17687:637:26",
                                "statements": [
                                  {
                                    "expression": {
                                      "id": 6269,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "baseExpression": {
                                          "id": 6264,
                                          "name": "output",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6218,
                                          "src": "17705:6:26",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                          }
                                        },
                                        "id": 6267,
                                        "indexExpression": {
                                          "id": 6266,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "UnaryOperation",
                                          "operator": "++",
                                          "prefix": false,
                                          "src": "17712:14:26",
                                          "subExpression": {
                                            "id": 6265,
                                            "name": "outputLength",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6228,
                                            "src": "17712:12:26",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": true,
                                        "nodeType": "IndexAccess",
                                        "src": "17705:22:26",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes1",
                                          "typeString": "bytes1"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "hexValue": "5c",
                                        "id": 6268,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "string",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "17730:4:26",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_stringliteral_731553fa98541ade8b78284229adfe09a819380dee9244baac20dd1e0aa24095",
                                          "typeString": "literal_string \"\\\""
                                        },
                                        "value": "\\"
                                      },
                                      "src": "17705:29:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes1",
                                        "typeString": "bytes1"
                                      }
                                    },
                                    "id": 6270,
                                    "nodeType": "ExpressionStatement",
                                    "src": "17705:29:26"
                                  },
                                  {
                                    "condition": {
                                      "commonType": {
                                        "typeIdentifier": "t_bytes1",
                                        "typeString": "bytes1"
                                      },
                                      "id": 6273,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 6271,
                                        "name": "char",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6242,
                                        "src": "17756:4:26",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes1",
                                          "typeString": "bytes1"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "==",
                                      "rightExpression": {
                                        "hexValue": "30783038",
                                        "id": 6272,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "17764:4:26",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_8_by_1",
                                          "typeString": "int_const 8"
                                        },
                                        "value": "0x08"
                                      },
                                      "src": "17756:12:26",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "falseBody": {
                                      "condition": {
                                        "commonType": {
                                          "typeIdentifier": "t_bytes1",
                                          "typeString": "bytes1"
                                        },
                                        "id": 6283,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 6281,
                                          "name": "char",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6242,
                                          "src": "17825:4:26",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes1",
                                            "typeString": "bytes1"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "==",
                                        "rightExpression": {
                                          "hexValue": "30783039",
                                          "id": 6282,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "17833:4:26",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_9_by_1",
                                            "typeString": "int_const 9"
                                          },
                                          "value": "0x09"
                                        },
                                        "src": "17825:12:26",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      },
                                      "falseBody": {
                                        "condition": {
                                          "commonType": {
                                            "typeIdentifier": "t_bytes1",
                                            "typeString": "bytes1"
                                          },
                                          "id": 6293,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "id": 6291,
                                            "name": "char",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6242,
                                            "src": "17894:4:26",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_bytes1",
                                              "typeString": "bytes1"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "==",
                                          "rightExpression": {
                                            "hexValue": "30783061",
                                            "id": 6292,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "17902:4:26",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_10_by_1",
                                              "typeString": "int_const 10"
                                            },
                                            "value": "0x0a"
                                          },
                                          "src": "17894:12:26",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                          }
                                        },
                                        "falseBody": {
                                          "condition": {
                                            "commonType": {
                                              "typeIdentifier": "t_bytes1",
                                              "typeString": "bytes1"
                                            },
                                            "id": 6303,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                              "id": 6301,
                                              "name": "char",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 6242,
                                              "src": "17963:4:26",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_bytes1",
                                                "typeString": "bytes1"
                                              }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "==",
                                            "rightExpression": {
                                              "hexValue": "30783063",
                                              "id": 6302,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "number",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "17971:4:26",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_rational_12_by_1",
                                                "typeString": "int_const 12"
                                              },
                                              "value": "0x0c"
                                            },
                                            "src": "17963:12:26",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_bool",
                                              "typeString": "bool"
                                            }
                                          },
                                          "falseBody": {
                                            "condition": {
                                              "commonType": {
                                                "typeIdentifier": "t_bytes1",
                                                "typeString": "bytes1"
                                              },
                                              "id": 6313,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "leftExpression": {
                                                "id": 6311,
                                                "name": "char",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 6242,
                                                "src": "18032:4:26",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_bytes1",
                                                  "typeString": "bytes1"
                                                }
                                              },
                                              "nodeType": "BinaryOperation",
                                              "operator": "==",
                                              "rightExpression": {
                                                "hexValue": "30783064",
                                                "id": 6312,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "number",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "18040:4:26",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_rational_13_by_1",
                                                  "typeString": "int_const 13"
                                                },
                                                "value": "0x0d"
                                              },
                                              "src": "18032:12:26",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                              }
                                            },
                                            "falseBody": {
                                              "condition": {
                                                "commonType": {
                                                  "typeIdentifier": "t_bytes1",
                                                  "typeString": "bytes1"
                                                },
                                                "id": 6323,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                  "id": 6321,
                                                  "name": "char",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 6242,
                                                  "src": "18101:4:26",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes1",
                                                    "typeString": "bytes1"
                                                  }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "==",
                                                "rightExpression": {
                                                  "hexValue": "30783563",
                                                  "id": 6322,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "kind": "number",
                                                  "lValueRequested": false,
                                                  "nodeType": "Literal",
                                                  "src": "18109:4:26",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_rational_92_by_1",
                                                    "typeString": "int_const 92"
                                                  },
                                                  "value": "0x5c"
                                                },
                                                "src": "18101:12:26",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_bool",
                                                  "typeString": "bool"
                                                }
                                              },
                                              "falseBody": {
                                                "condition": {
                                                  "commonType": {
                                                    "typeIdentifier": "t_bytes1",
                                                    "typeString": "bytes1"
                                                  },
                                                  "id": 6333,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "leftExpression": {
                                                    "id": 6331,
                                                    "name": "char",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 6242,
                                                    "src": "18171:4:26",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_bytes1",
                                                      "typeString": "bytes1"
                                                    }
                                                  },
                                                  "nodeType": "BinaryOperation",
                                                  "operator": "==",
                                                  "rightExpression": {
                                                    "hexValue": "30783232",
                                                    "id": 6332,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "18179:4:26",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_rational_34_by_1",
                                                      "typeString": "int_const 34"
                                                    },
                                                    "value": "0x22"
                                                  },
                                                  "src": "18171:12:26",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                  }
                                                },
                                                "id": 6342,
                                                "nodeType": "IfStatement",
                                                "src": "18167:143:26",
                                                "trueBody": {
                                                  "id": 6341,
                                                  "nodeType": "Block",
                                                  "src": "18185:125:26",
                                                  "statements": [
                                                    {
                                                      "expression": {
                                                        "id": 6339,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "leftHandSide": {
                                                          "baseExpression": {
                                                            "id": 6334,
                                                            "name": "output",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 6218,
                                                            "src": "18263:6:26",
                                                            "typeDescriptions": {
                                                              "typeIdentifier": "t_bytes_memory_ptr",
                                                              "typeString": "bytes memory"
                                                            }
                                                          },
                                                          "id": 6337,
                                                          "indexExpression": {
                                                            "id": 6336,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "nodeType": "UnaryOperation",
                                                            "operator": "++",
                                                            "prefix": false,
                                                            "src": "18270:14:26",
                                                            "subExpression": {
                                                              "id": 6335,
                                                              "name": "outputLength",
                                                              "nodeType": "Identifier",
                                                              "overloadedDeclarations": [],
                                                              "referencedDeclaration": 6228,
                                                              "src": "18270:12:26",
                                                              "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                              }
                                                            },
                                                            "typeDescriptions": {
                                                              "typeIdentifier": "t_uint256",
                                                              "typeString": "uint256"
                                                            }
                                                          },
                                                          "isConstant": false,
                                                          "isLValue": true,
                                                          "isPure": false,
                                                          "lValueRequested": true,
                                                          "nodeType": "IndexAccess",
                                                          "src": "18263:22:26",
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_bytes1",
                                                            "typeString": "bytes1"
                                                          }
                                                        },
                                                        "nodeType": "Assignment",
                                                        "operator": "=",
                                                        "rightHandSide": {
                                                          "hexValue": "22",
                                                          "id": 6338,
                                                          "isConstant": false,
                                                          "isLValue": false,
                                                          "isPure": true,
                                                          "kind": "string",
                                                          "lValueRequested": false,
                                                          "nodeType": "Literal",
                                                          "src": "18288:3:26",
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_stringliteral_6e9f33448a4153023cdaf3eb759f1afdc24aba433a3e18b683f8c04a6eaa69f0",
                                                            "typeString": "literal_string \"\"\""
                                                          },
                                                          "value": "\""
                                                        },
                                                        "src": "18263:28:26",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_bytes1",
                                                          "typeString": "bytes1"
                                                        }
                                                      },
                                                      "id": 6340,
                                                      "nodeType": "ExpressionStatement",
                                                      "src": "18263:28:26"
                                                    }
                                                  ]
                                                }
                                              },
                                              "id": 6343,
                                              "nodeType": "IfStatement",
                                              "src": "18097:213:26",
                                              "trueBody": {
                                                "expression": {
                                                  "id": 6329,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "leftHandSide": {
                                                    "baseExpression": {
                                                      "id": 6324,
                                                      "name": "output",
                                                      "nodeType": "Identifier",
                                                      "overloadedDeclarations": [],
                                                      "referencedDeclaration": 6218,
                                                      "src": "18115:6:26",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes_memory_ptr",
                                                        "typeString": "bytes memory"
                                                      }
                                                    },
                                                    "id": 6327,
                                                    "indexExpression": {
                                                      "id": 6326,
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": false,
                                                      "lValueRequested": false,
                                                      "nodeType": "UnaryOperation",
                                                      "operator": "++",
                                                      "prefix": false,
                                                      "src": "18122:14:26",
                                                      "subExpression": {
                                                        "id": 6325,
                                                        "name": "outputLength",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 6228,
                                                        "src": "18122:12:26",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_uint256",
                                                          "typeString": "uint256"
                                                        }
                                                      },
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                      }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": true,
                                                    "nodeType": "IndexAccess",
                                                    "src": "18115:22:26",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_bytes1",
                                                      "typeString": "bytes1"
                                                    }
                                                  },
                                                  "nodeType": "Assignment",
                                                  "operator": "=",
                                                  "rightHandSide": {
                                                    "hexValue": "5c",
                                                    "id": 6328,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "string",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "18140:4:26",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_stringliteral_731553fa98541ade8b78284229adfe09a819380dee9244baac20dd1e0aa24095",
                                                      "typeString": "literal_string \"\\\""
                                                    },
                                                    "value": "\\"
                                                  },
                                                  "src": "18115:29:26",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes1",
                                                    "typeString": "bytes1"
                                                  }
                                                },
                                                "id": 6330,
                                                "nodeType": "ExpressionStatement",
                                                "src": "18115:29:26"
                                              }
                                            },
                                            "id": 6344,
                                            "nodeType": "IfStatement",
                                            "src": "18028:282:26",
                                            "trueBody": {
                                              "expression": {
                                                "id": 6319,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftHandSide": {
                                                  "baseExpression": {
                                                    "id": 6314,
                                                    "name": "output",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 6218,
                                                    "src": "18046:6:26",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_bytes_memory_ptr",
                                                      "typeString": "bytes memory"
                                                    }
                                                  },
                                                  "id": 6317,
                                                  "indexExpression": {
                                                    "id": 6316,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "UnaryOperation",
                                                    "operator": "++",
                                                    "prefix": false,
                                                    "src": "18053:14:26",
                                                    "subExpression": {
                                                      "id": 6315,
                                                      "name": "outputLength",
                                                      "nodeType": "Identifier",
                                                      "overloadedDeclarations": [],
                                                      "referencedDeclaration": 6228,
                                                      "src": "18053:12:26",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                      }
                                                    },
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_uint256",
                                                      "typeString": "uint256"
                                                    }
                                                  },
                                                  "isConstant": false,
                                                  "isLValue": true,
                                                  "isPure": false,
                                                  "lValueRequested": true,
                                                  "nodeType": "IndexAccess",
                                                  "src": "18046:22:26",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes1",
                                                    "typeString": "bytes1"
                                                  }
                                                },
                                                "nodeType": "Assignment",
                                                "operator": "=",
                                                "rightHandSide": {
                                                  "hexValue": "72",
                                                  "id": 6318,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "kind": "string",
                                                  "lValueRequested": false,
                                                  "nodeType": "Literal",
                                                  "src": "18071:3:26",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_414f72a4d550cad29f17d9d99a4af64b3776ec5538cd440cef0f03fef2e9e010",
                                                    "typeString": "literal_string \"r\""
                                                  },
                                                  "value": "r"
                                                },
                                                "src": "18046:28:26",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_bytes1",
                                                  "typeString": "bytes1"
                                                }
                                              },
                                              "id": 6320,
                                              "nodeType": "ExpressionStatement",
                                              "src": "18046:28:26"
                                            }
                                          },
                                          "id": 6345,
                                          "nodeType": "IfStatement",
                                          "src": "17959:351:26",
                                          "trueBody": {
                                            "expression": {
                                              "id": 6309,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "leftHandSide": {
                                                "baseExpression": {
                                                  "id": 6304,
                                                  "name": "output",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 6218,
                                                  "src": "17977:6:26",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes memory"
                                                  }
                                                },
                                                "id": 6307,
                                                "indexExpression": {
                                                  "id": 6306,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "nodeType": "UnaryOperation",
                                                  "operator": "++",
                                                  "prefix": false,
                                                  "src": "17984:14:26",
                                                  "subExpression": {
                                                    "id": 6305,
                                                    "name": "outputLength",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 6228,
                                                    "src": "17984:12:26",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_uint256",
                                                      "typeString": "uint256"
                                                    }
                                                  },
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  }
                                                },
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": true,
                                                "nodeType": "IndexAccess",
                                                "src": "17977:22:26",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_bytes1",
                                                  "typeString": "bytes1"
                                                }
                                              },
                                              "nodeType": "Assignment",
                                              "operator": "=",
                                              "rightHandSide": {
                                                "hexValue": "66",
                                                "id": 6308,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "18002:3:26",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_stringliteral_d1e8aeb79500496ef3dc2e57ba746a8315d048b7a664a2bf948db4fa91960483",
                                                  "typeString": "literal_string \"f\""
                                                },
                                                "value": "f"
                                              },
                                              "src": "17977:28:26",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_bytes1",
                                                "typeString": "bytes1"
                                              }
                                            },
                                            "id": 6310,
                                            "nodeType": "ExpressionStatement",
                                            "src": "17977:28:26"
                                          }
                                        },
                                        "id": 6346,
                                        "nodeType": "IfStatement",
                                        "src": "17890:420:26",
                                        "trueBody": {
                                          "expression": {
                                            "id": 6299,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftHandSide": {
                                              "baseExpression": {
                                                "id": 6294,
                                                "name": "output",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 6218,
                                                "src": "17908:6:26",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_bytes_memory_ptr",
                                                  "typeString": "bytes memory"
                                                }
                                              },
                                              "id": 6297,
                                              "indexExpression": {
                                                "id": 6296,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "UnaryOperation",
                                                "operator": "++",
                                                "prefix": false,
                                                "src": "17915:14:26",
                                                "subExpression": {
                                                  "id": 6295,
                                                  "name": "outputLength",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 6228,
                                                  "src": "17915:12:26",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  }
                                                },
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              },
                                              "isConstant": false,
                                              "isLValue": true,
                                              "isPure": false,
                                              "lValueRequested": true,
                                              "nodeType": "IndexAccess",
                                              "src": "17908:22:26",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_bytes1",
                                                "typeString": "bytes1"
                                              }
                                            },
                                            "nodeType": "Assignment",
                                            "operator": "=",
                                            "rightHandSide": {
                                              "hexValue": "6e",
                                              "id": 6298,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "string",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "17933:3:26",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_stringliteral_4b4ecedb4964a40fe416b16c7bd8b46092040ec42ef0aa69e59f09872f105cf3",
                                                "typeString": "literal_string \"n\""
                                              },
                                              "value": "n"
                                            },
                                            "src": "17908:28:26",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_bytes1",
                                              "typeString": "bytes1"
                                            }
                                          },
                                          "id": 6300,
                                          "nodeType": "ExpressionStatement",
                                          "src": "17908:28:26"
                                        }
                                      },
                                      "id": 6347,
                                      "nodeType": "IfStatement",
                                      "src": "17821:489:26",
                                      "trueBody": {
                                        "expression": {
                                          "id": 6289,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftHandSide": {
                                            "baseExpression": {
                                              "id": 6284,
                                              "name": "output",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 6218,
                                              "src": "17839:6:26",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                "typeString": "bytes memory"
                                              }
                                            },
                                            "id": 6287,
                                            "indexExpression": {
                                              "id": 6286,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "nodeType": "UnaryOperation",
                                              "operator": "++",
                                              "prefix": false,
                                              "src": "17846:14:26",
                                              "subExpression": {
                                                "id": 6285,
                                                "name": "outputLength",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 6228,
                                                "src": "17846:12:26",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              },
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "nodeType": "IndexAccess",
                                            "src": "17839:22:26",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_bytes1",
                                              "typeString": "bytes1"
                                            }
                                          },
                                          "nodeType": "Assignment",
                                          "operator": "=",
                                          "rightHandSide": {
                                            "hexValue": "74",
                                            "id": 6288,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "string",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "17864:3:26",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_stringliteral_cac1bb71f0a97c8ac94ca9546b43178a9ad254c7b757ac07433aa6df35cd8089",
                                              "typeString": "literal_string \"t\""
                                            },
                                            "value": "t"
                                          },
                                          "src": "17839:28:26",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes1",
                                            "typeString": "bytes1"
                                          }
                                        },
                                        "id": 6290,
                                        "nodeType": "ExpressionStatement",
                                        "src": "17839:28:26"
                                      }
                                    },
                                    "id": 6348,
                                    "nodeType": "IfStatement",
                                    "src": "17752:558:26",
                                    "trueBody": {
                                      "expression": {
                                        "id": 6279,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                          "baseExpression": {
                                            "id": 6274,
                                            "name": "output",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6218,
                                            "src": "17770:6:26",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_bytes_memory_ptr",
                                              "typeString": "bytes memory"
                                            }
                                          },
                                          "id": 6277,
                                          "indexExpression": {
                                            "id": 6276,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "UnaryOperation",
                                            "operator": "++",
                                            "prefix": false,
                                            "src": "17777:14:26",
                                            "subExpression": {
                                              "id": 6275,
                                              "name": "outputLength",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 6228,
                                              "src": "17777:12:26",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": true,
                                          "nodeType": "IndexAccess",
                                          "src": "17770:22:26",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes1",
                                            "typeString": "bytes1"
                                          }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                          "hexValue": "62",
                                          "id": 6278,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "string",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "17795:3:26",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_stringliteral_b5553de315e0edf504d9150af82dafa5c4667fa618ed0a6f19c69b41166c5510",
                                            "typeString": "literal_string \"b\""
                                          },
                                          "value": "b"
                                        },
                                        "src": "17770:28:26",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes1",
                                          "typeString": "bytes1"
                                        }
                                      },
                                      "id": 6280,
                                      "nodeType": "ExpressionStatement",
                                      "src": "17770:28:26"
                                    }
                                  }
                                ]
                              }
                            }
                          ]
                        },
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 6237,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 6234,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6232,
                            "src": "17524:1:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "expression": {
                              "id": 6235,
                              "name": "buffer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6211,
                              "src": "17528:6:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 6236,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "17535:6:26",
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "17528:13:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "17524:17:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 6360,
                        "initializationExpression": {
                          "assignments": [
                            6232
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 6232,
                              "mutability": "mutable",
                              "name": "i",
                              "nameLocation": "17521:1:26",
                              "nodeType": "VariableDeclaration",
                              "scope": 6360,
                              "src": "17513:9:26",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 6231,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "17513:7:26",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "visibility": "internal"
                            }
                          ],
                          "id": 6233,
                          "nodeType": "VariableDeclarationStatement",
                          "src": "17513:9:26"
                        },
                        "isSimpleCounterLoop": true,
                        "loopExpression": {
                          "expression": {
                            "id": 6239,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": true,
                            "src": "17543:3:26",
                            "subExpression": {
                              "id": 6238,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6232,
                              "src": "17545:1:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 6240,
                          "nodeType": "ExpressionStatement",
                          "src": "17543:3:26"
                        },
                        "nodeType": "ForStatement",
                        "src": "17508:894:26"
                      },
                      {
                        "AST": {
                          "nativeSrc": "18500:129:26",
                          "nodeType": "YulBlock",
                          "src": "18500:129:26",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "output",
                                    "nativeSrc": "18521:6:26",
                                    "nodeType": "YulIdentifier",
                                    "src": "18521:6:26"
                                  },
                                  {
                                    "name": "outputLength",
                                    "nativeSrc": "18529:12:26",
                                    "nodeType": "YulIdentifier",
                                    "src": "18529:12:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nativeSrc": "18514:6:26",
                                  "nodeType": "YulIdentifier",
                                  "src": "18514:6:26"
                                },
                                "nativeSrc": "18514:28:26",
                                "nodeType": "YulFunctionCall",
                                "src": "18514:28:26"
                              },
                              "nativeSrc": "18514:28:26",
                              "nodeType": "YulExpressionStatement",
                              "src": "18514:28:26"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nativeSrc": "18562:4:26",
                                    "nodeType": "YulLiteral",
                                    "src": "18562:4:26",
                                    "type": "",
                                    "value": "0x40"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "output",
                                        "nativeSrc": "18572:6:26",
                                        "nodeType": "YulIdentifier",
                                        "src": "18572:6:26"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "kind": "number",
                                            "nativeSrc": "18584:1:26",
                                            "nodeType": "YulLiteral",
                                            "src": "18584:1:26",
                                            "type": "",
                                            "value": "5"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nativeSrc": "18591:1:26",
                                                "nodeType": "YulLiteral",
                                                "src": "18591:1:26",
                                                "type": "",
                                                "value": "5"
                                              },
                                              {
                                                "arguments": [
                                                  {
                                                    "name": "outputLength",
                                                    "nativeSrc": "18598:12:26",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "18598:12:26"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nativeSrc": "18612:2:26",
                                                    "nodeType": "YulLiteral",
                                                    "src": "18612:2:26",
                                                    "type": "",
                                                    "value": "63"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "add",
                                                  "nativeSrc": "18594:3:26",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "18594:3:26"
                                                },
                                                "nativeSrc": "18594:21:26",
                                                "nodeType": "YulFunctionCall",
                                                "src": "18594:21:26"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "shr",
                                              "nativeSrc": "18587:3:26",
                                              "nodeType": "YulIdentifier",
                                              "src": "18587:3:26"
                                            },
                                            "nativeSrc": "18587:29:26",
                                            "nodeType": "YulFunctionCall",
                                            "src": "18587:29:26"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "shl",
                                          "nativeSrc": "18580:3:26",
                                          "nodeType": "YulIdentifier",
                                          "src": "18580:3:26"
                                        },
                                        "nativeSrc": "18580:37:26",
                                        "nodeType": "YulFunctionCall",
                                        "src": "18580:37:26"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nativeSrc": "18568:3:26",
                                      "nodeType": "YulIdentifier",
                                      "src": "18568:3:26"
                                    },
                                    "nativeSrc": "18568:50:26",
                                    "nodeType": "YulFunctionCall",
                                    "src": "18568:50:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nativeSrc": "18555:6:26",
                                  "nodeType": "YulIdentifier",
                                  "src": "18555:6:26"
                                },
                                "nativeSrc": "18555:64:26",
                                "nodeType": "YulFunctionCall",
                                "src": "18555:64:26"
                              },
                              "nativeSrc": "18555:64:26",
                              "nodeType": "YulExpressionStatement",
                              "src": "18555:64:26"
                            }
                          ]
                        },
                        "evmVersion": "paris",
                        "externalReferences": [
                          {
                            "declaration": 6218,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "18521:6:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 6218,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "18572:6:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 6228,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "18529:12:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 6228,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "18598:12:26",
                            "valueSize": 1
                          }
                        ],
                        "flags": [
                          "memory-safe"
                        ],
                        "id": 6361,
                        "nodeType": "InlineAssembly",
                        "src": "18475:154:26"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 6364,
                              "name": "output",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6218,
                              "src": "18653:6:26",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 6363,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "18646:6:26",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                              "typeString": "type(string storage pointer)"
                            },
                            "typeName": {
                              "id": 6362,
                              "name": "string",
                              "nodeType": "ElementaryTypeName",
                              "src": "18646:6:26",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 6365,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "18646:14:26",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        "functionReturnParameters": 6209,
                        "id": 6366,
                        "nodeType": "Return",
                        "src": "18639:21:26"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 6203,
                    "nodeType": "StructuredDocumentation",
                    "src": "16676:576:26",
                    "text": " @dev Escape special characters in JSON strings. This can be useful to prevent JSON injection in NFT metadata.\n WARNING: This function should only be used in double quoted JSON strings. Single quotes are not escaped.\n NOTE: This function escapes all unicode characters, and not just the ones in ranges defined in section 2.5 of\n RFC-4627 (U+0000 to U+001F, U+0022 and U+005C). ECMAScript's `JSON.parse` does recover escaped unicode\n characters that are not in this range, but other tooling may provide different results."
                  },
                  "id": 6368,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "escapeJSON",
                  "nameLocation": "17266:10:26",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 6206,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6205,
                        "mutability": "mutable",
                        "name": "input",
                        "nameLocation": "17291:5:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 6368,
                        "src": "17277:19:26",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 6204,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "17277:6:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "17276:21:26"
                  },
                  "returnParameters": {
                    "id": 6209,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6208,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 6368,
                        "src": "17321:13:26",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 6207,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "17321:6:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "17320:15:26"
                  },
                  "scope": 6381,
                  "src": "17257:1410:26",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 6379,
                    "nodeType": "Block",
                    "src": "19052:225:26",
                    "statements": [
                      {
                        "AST": {
                          "nativeSrc": "19201:70:26",
                          "nodeType": "YulBlock",
                          "src": "19201:70:26",
                          "statements": [
                            {
                              "nativeSrc": "19215:46:26",
                              "nodeType": "YulAssignment",
                              "src": "19215:46:26",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "buffer",
                                            "nativeSrc": "19238:6:26",
                                            "nodeType": "YulIdentifier",
                                            "src": "19238:6:26"
                                          },
                                          {
                                            "kind": "number",
                                            "nativeSrc": "19246:4:26",
                                            "nodeType": "YulLiteral",
                                            "src": "19246:4:26",
                                            "type": "",
                                            "value": "0x20"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nativeSrc": "19234:3:26",
                                          "nodeType": "YulIdentifier",
                                          "src": "19234:3:26"
                                        },
                                        "nativeSrc": "19234:17:26",
                                        "nodeType": "YulFunctionCall",
                                        "src": "19234:17:26"
                                      },
                                      {
                                        "name": "offset",
                                        "nativeSrc": "19253:6:26",
                                        "nodeType": "YulIdentifier",
                                        "src": "19253:6:26"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nativeSrc": "19230:3:26",
                                      "nodeType": "YulIdentifier",
                                      "src": "19230:3:26"
                                    },
                                    "nativeSrc": "19230:30:26",
                                    "nodeType": "YulFunctionCall",
                                    "src": "19230:30:26"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nativeSrc": "19224:5:26",
                                  "nodeType": "YulIdentifier",
                                  "src": "19224:5:26"
                                },
                                "nativeSrc": "19224:37:26",
                                "nodeType": "YulFunctionCall",
                                "src": "19224:37:26"
                              },
                              "variableNames": [
                                {
                                  "name": "value",
                                  "nativeSrc": "19215:5:26",
                                  "nodeType": "YulIdentifier",
                                  "src": "19215:5:26"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "paris",
                        "externalReferences": [
                          {
                            "declaration": 6371,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "19238:6:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 6373,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "19253:6:26",
                            "valueSize": 1
                          },
                          {
                            "declaration": 6376,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "19215:5:26",
                            "valueSize": 1
                          }
                        ],
                        "flags": [
                          "memory-safe"
                        ],
                        "id": 6378,
                        "nodeType": "InlineAssembly",
                        "src": "19176:95:26"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 6369,
                    "nodeType": "StructuredDocumentation",
                    "src": "18673:268:26",
                    "text": " @dev Reads a bytes32 from a bytes array without bounds checking.\n NOTE: making this function internal would mean it could be used with memory unsafe offset, and marking the\n assembly block as such would prevent some optimizations."
                  },
                  "id": 6380,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_unsafeReadBytesOffset",
                  "nameLocation": "18955:22:26",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 6374,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6371,
                        "mutability": "mutable",
                        "name": "buffer",
                        "nameLocation": "18991:6:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 6380,
                        "src": "18978:19:26",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 6370,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "18978:5:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6373,
                        "mutability": "mutable",
                        "name": "offset",
                        "nameLocation": "19007:6:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 6380,
                        "src": "18999:14:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6372,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "18999:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "18977:37:26"
                  },
                  "returnParameters": {
                    "id": 6377,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6376,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "19045:5:26",
                        "nodeType": "VariableDeclaration",
                        "scope": 6380,
                        "src": "19037:13:26",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 6375,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "19037:7:26",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "19036:15:26"
                  },
                  "scope": 6381,
                  "src": "18946:331:26",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "private"
                }
              ],
              "scope": 6382,
              "src": "297:18982:26",
              "usedErrors": [
                5039,
                5042,
                5045
              ],
              "usedEvents": []
            }
          ],
          "src": "101:19179:26"
        },
        "id": 26
      },
      "@openzeppelin/contracts/utils/introspection/IERC165.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/utils/introspection/IERC165.sol",
          "exportedSymbols": {
            "IERC165": [
              6393
            ]
          },
          "id": 6394,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 6383,
              "literals": [
                "solidity",
                ">=",
                "0.4",
                ".16"
              ],
              "nodeType": "PragmaDirective",
              "src": "115:25:27"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "canonicalName": "IERC165",
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 6384,
                "nodeType": "StructuredDocumentation",
                "src": "142:280:27",
                "text": " @dev Interface of the ERC-165 standard, as defined in the\n https://eips.ethereum.org/EIPS/eip-165[ERC].\n Implementers can declare support of contract interfaces, which can then be\n queried by others ({ERC165Checker}).\n For an implementation, see {ERC165}."
              },
              "fullyImplemented": false,
              "id": 6393,
              "linearizedBaseContracts": [
                6393
              ],
              "name": "IERC165",
              "nameLocation": "433:7:27",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "documentation": {
                    "id": 6385,
                    "nodeType": "StructuredDocumentation",
                    "src": "447:340:27",
                    "text": " @dev Returns true if this contract implements the interface defined by\n `interfaceId`. See the corresponding\n https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]\n to learn more about how these ids are created.\n This function call must use less than 30 000 gas."
                  },
                  "functionSelector": "01ffc9a7",
                  "id": 6392,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "supportsInterface",
                  "nameLocation": "801:17:27",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 6388,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6387,
                        "mutability": "mutable",
                        "name": "interfaceId",
                        "nameLocation": "826:11:27",
                        "nodeType": "VariableDeclaration",
                        "scope": 6392,
                        "src": "819:18:27",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "typeName": {
                          "id": 6386,
                          "name": "bytes4",
                          "nodeType": "ElementaryTypeName",
                          "src": "819:6:27",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "818:20:27"
                  },
                  "returnParameters": {
                    "id": 6391,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6390,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 6392,
                        "src": "862:4:27",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 6389,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "862:4:27",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "861:6:27"
                  },
                  "scope": 6393,
                  "src": "792:76:27",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 6394,
              "src": "423:447:27",
              "usedErrors": [],
              "usedEvents": []
            }
          ],
          "src": "115:756:27"
        },
        "id": 27
      },
      "@openzeppelin/contracts/utils/math/Math.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/utils/math/Math.sol",
          "exportedSymbols": {
            "Math": [
              8014
            ],
            "Panic": [
              4725
            ],
            "SafeCast": [
              9779
            ]
          },
          "id": 8015,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 6395,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".20"
              ],
              "nodeType": "PragmaDirective",
              "src": "103:24:28"
            },
            {
              "absolutePath": "@openzeppelin/contracts/utils/Panic.sol",
              "file": "../Panic.sol",
              "id": 6397,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 8015,
              "sourceUnit": 4726,
              "src": "129:35:28",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 6396,
                    "name": "Panic",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4725,
                    "src": "137:5:28",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/utils/math/SafeCast.sol",
              "file": "./SafeCast.sol",
              "id": 6399,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 8015,
              "sourceUnit": 9780,
              "src": "165:40:28",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 6398,
                    "name": "SafeCast",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 9779,
                    "src": "173:8:28",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [],
              "canonicalName": "Math",
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 6400,
                "nodeType": "StructuredDocumentation",
                "src": "207:73:28",
                "text": " @dev Standard math utilities missing in the Solidity language."
              },
              "fullyImplemented": true,
              "id": 8014,
              "linearizedBaseContracts": [
                8014
              ],
              "name": "Math",
              "nameLocation": "289:4:28",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "canonicalName": "Math.Rounding",
                  "id": 6405,
                  "members": [
                    {
                      "id": 6401,
                      "name": "Floor",
                      "nameLocation": "324:5:28",
                      "nodeType": "EnumValue",
                      "src": "324:5:28"
                    },
                    {
                      "id": 6402,
                      "name": "Ceil",
                      "nameLocation": "367:4:28",
                      "nodeType": "EnumValue",
                      "src": "367:4:28"
                    },
                    {
                      "id": 6403,
                      "name": "Trunc",
                      "nameLocation": "409:5:28",
                      "nodeType": "EnumValue",
                      "src": "409:5:28"
                    },
                    {
                      "id": 6404,
                      "name": "Expand",
                      "nameLocation": "439:6:28",
                      "nodeType": "EnumValue",
                      "src": "439:6:28"
                    }
                  ],
                  "name": "Rounding",
                  "nameLocation": "305:8:28",
                  "nodeType": "EnumDefinition",
                  "src": "300:169:28"
                },
                {
                  "body": {
                    "id": 6418,
                    "nodeType": "Block",
                    "src": "731:112:28",
                    "statements": [
                      {
                        "AST": {
                          "nativeSrc": "766:71:28",
                          "nodeType": "YulBlock",
                          "src": "766:71:28",
                          "statements": [
                            {
                              "nativeSrc": "780:16:28",
                              "nodeType": "YulAssignment",
                              "src": "780:16:28",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "a",
                                    "nativeSrc": "791:1:28",
                                    "nodeType": "YulIdentifier",
                                    "src": "791:1:28"
                                  },
                                  {
                                    "name": "b",
                                    "nativeSrc": "794:1:28",
                                    "nodeType": "YulIdentifier",
                                    "src": "794:1:28"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nativeSrc": "787:3:28",
                                  "nodeType": "YulIdentifier",
                                  "src": "787:3:28"
                                },
                                "nativeSrc": "787:9:28",
                                "nodeType": "YulFunctionCall",
                                "src": "787:9:28"
                              },
                              "variableNames": [
                                {
                                  "name": "low",
                                  "nativeSrc": "780:3:28",
                                  "nodeType": "YulIdentifier",
                                  "src": "780:3:28"
                                }
                              ]
                            },
                            {
                              "nativeSrc": "809:18:28",
                              "nodeType": "YulAssignment",
                              "src": "809:18:28",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "low",
                                    "nativeSrc": "820:3:28",
                                    "nodeType": "YulIdentifier",
                                    "src": "820:3:28"
                                  },
                                  {
                                    "name": "a",
                                    "nativeSrc": "825:1:28",
                                    "nodeType": "YulIdentifier",
                                    "src": "825:1:28"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nativeSrc": "817:2:28",
                                  "nodeType": "YulIdentifier",
                                  "src": "817:2:28"
                                },
                                "nativeSrc": "817:10:28",
                                "nodeType": "YulFunctionCall",
                                "src": "817:10:28"
                              },
                              "variableNames": [
                                {
                                  "name": "high",
                                  "nativeSrc": "809:4:28",
                                  "nodeType": "YulIdentifier",
                                  "src": "809:4:28"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "paris",
                        "externalReferences": [
                          {
                            "declaration": 6408,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "791:1:28",
                            "valueSize": 1
                          },
                          {
                            "declaration": 6408,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "825:1:28",
                            "valueSize": 1
                          },
                          {
                            "declaration": 6410,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "794:1:28",
                            "valueSize": 1
                          },
                          {
                            "declaration": 6413,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "809:4:28",
                            "valueSize": 1
                          },
                          {
                            "declaration": 6415,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "780:3:28",
                            "valueSize": 1
                          },
                          {
                            "declaration": 6415,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "820:3:28",
                            "valueSize": 1
                          }
                        ],
                        "flags": [
                          "memory-safe"
                        ],
                        "id": 6417,
                        "nodeType": "InlineAssembly",
                        "src": "741:96:28"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 6406,
                    "nodeType": "StructuredDocumentation",
                    "src": "475:163:28",
                    "text": " @dev Return the 512-bit addition of two uint256.\n The result is stored in two 256 variables such that sum = high * 2²⁵⁶ + low."
                  },
                  "id": 6419,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "add512",
                  "nameLocation": "652:6:28",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 6411,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6408,
                        "mutability": "mutable",
                        "name": "a",
                        "nameLocation": "667:1:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 6419,
                        "src": "659:9:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6407,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "659:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6410,
                        "mutability": "mutable",
                        "name": "b",
                        "nameLocation": "678:1:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 6419,
                        "src": "670:9:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6409,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "670:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "658:22:28"
                  },
                  "returnParameters": {
                    "id": 6416,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6413,
                        "mutability": "mutable",
                        "name": "high",
                        "nameLocation": "712:4:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 6419,
                        "src": "704:12:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6412,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "704:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6415,
                        "mutability": "mutable",
                        "name": "low",
                        "nameLocation": "726:3:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 6419,
                        "src": "718:11:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6414,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "718:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "703:27:28"
                  },
                  "scope": 8014,
                  "src": "643:200:28",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 6432,
                    "nodeType": "Block",
                    "src": "1115:462:28",
                    "statements": [
                      {
                        "AST": {
                          "nativeSrc": "1437:134:28",
                          "nodeType": "YulBlock",
                          "src": "1437:134:28",
                          "statements": [
                            {
                              "nativeSrc": "1451:30:28",
                              "nodeType": "YulVariableDeclaration",
                              "src": "1451:30:28",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "a",
                                    "nativeSrc": "1468:1:28",
                                    "nodeType": "YulIdentifier",
                                    "src": "1468:1:28"
                                  },
                                  {
                                    "name": "b",
                                    "nativeSrc": "1471:1:28",
                                    "nodeType": "YulIdentifier",
                                    "src": "1471:1:28"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nativeSrc": "1478:1:28",
                                        "nodeType": "YulLiteral",
                                        "src": "1478:1:28",
                                        "type": "",
                                        "value": "0"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "not",
                                      "nativeSrc": "1474:3:28",
                                      "nodeType": "YulIdentifier",
                                      "src": "1474:3:28"
                                    },
                                    "nativeSrc": "1474:6:28",
                                    "nodeType": "YulFunctionCall",
                                    "src": "1474:6:28"
                                  }
                                ],
                                "functionName": {
                                  "name": "mulmod",
                                  "nativeSrc": "1461:6:28",
                                  "nodeType": "YulIdentifier",
                                  "src": "1461:6:28"
                                },
                                "nativeSrc": "1461:20:28",
                                "nodeType": "YulFunctionCall",
                                "src": "1461:20:28"
                              },
                              "variables": [
                                {
                                  "name": "mm",
                                  "nativeSrc": "1455:2:28",
                                  "nodeType": "YulTypedName",
                                  "src": "1455:2:28",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nativeSrc": "1494:16:28",
                              "nodeType": "YulAssignment",
                              "src": "1494:16:28",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "a",
                                    "nativeSrc": "1505:1:28",
                                    "nodeType": "YulIdentifier",
                                    "src": "1505:1:28"
                                  },
                                  {
                                    "name": "b",
                                    "nativeSrc": "1508:1:28",
                                    "nodeType": "YulIdentifier",
                                    "src": "1508:1:28"
                                  }
                                ],
                                "functionName": {
                                  "name": "mul",
                                  "nativeSrc": "1501:3:28",
                                  "nodeType": "YulIdentifier",
                                  "src": "1501:3:28"
                                },
                                "nativeSrc": "1501:9:28",
                                "nodeType": "YulFunctionCall",
                                "src": "1501:9:28"
                              },
                              "variableNames": [
                                {
                                  "name": "low",
                                  "nativeSrc": "1494:3:28",
                                  "nodeType": "YulIdentifier",
                                  "src": "1494:3:28"
                                }
                              ]
                            },
                            {
                              "nativeSrc": "1523:38:28",
                              "nodeType": "YulAssignment",
                              "src": "1523:38:28",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "mm",
                                        "nativeSrc": "1539:2:28",
                                        "nodeType": "YulIdentifier",
                                        "src": "1539:2:28"
                                      },
                                      {
                                        "name": "low",
                                        "nativeSrc": "1543:3:28",
                                        "nodeType": "YulIdentifier",
                                        "src": "1543:3:28"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nativeSrc": "1535:3:28",
                                      "nodeType": "YulIdentifier",
                                      "src": "1535:3:28"
                                    },
                                    "nativeSrc": "1535:12:28",
                                    "nodeType": "YulFunctionCall",
                                    "src": "1535:12:28"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "mm",
                                        "nativeSrc": "1552:2:28",
                                        "nodeType": "YulIdentifier",
                                        "src": "1552:2:28"
                                      },
                                      {
                                        "name": "low",
                                        "nativeSrc": "1556:3:28",
                                        "nodeType": "YulIdentifier",
                                        "src": "1556:3:28"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "lt",
                                      "nativeSrc": "1549:2:28",
                                      "nodeType": "YulIdentifier",
                                      "src": "1549:2:28"
                                    },
                                    "nativeSrc": "1549:11:28",
                                    "nodeType": "YulFunctionCall",
                                    "src": "1549:11:28"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nativeSrc": "1531:3:28",
                                  "nodeType": "YulIdentifier",
                                  "src": "1531:3:28"
                                },
                                "nativeSrc": "1531:30:28",
                                "nodeType": "YulFunctionCall",
                                "src": "1531:30:28"
                              },
                              "variableNames": [
                                {
                                  "name": "high",
                                  "nativeSrc": "1523:4:28",
                                  "nodeType": "YulIdentifier",
                                  "src": "1523:4:28"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "paris",
                        "externalReferences": [
                          {
                            "declaration": 6422,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1468:1:28",
                            "valueSize": 1
                          },
                          {
                            "declaration": 6422,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1505:1:28",
                            "valueSize": 1
                          },
                          {
                            "declaration": 6424,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1471:1:28",
                            "valueSize": 1
                          },
                          {
                            "declaration": 6424,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1508:1:28",
                            "valueSize": 1
                          },
                          {
                            "declaration": 6427,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1523:4:28",
                            "valueSize": 1
                          },
                          {
                            "declaration": 6429,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1494:3:28",
                            "valueSize": 1
                          },
                          {
                            "declaration": 6429,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1543:3:28",
                            "valueSize": 1
                          },
                          {
                            "declaration": 6429,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1556:3:28",
                            "valueSize": 1
                          }
                        ],
                        "flags": [
                          "memory-safe"
                        ],
                        "id": 6431,
                        "nodeType": "InlineAssembly",
                        "src": "1412:159:28"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 6420,
                    "nodeType": "StructuredDocumentation",
                    "src": "849:173:28",
                    "text": " @dev Return the 512-bit multiplication of two uint256.\n The result is stored in two 256 variables such that product = high * 2²⁵⁶ + low."
                  },
                  "id": 6433,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "mul512",
                  "nameLocation": "1036:6:28",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 6425,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6422,
                        "mutability": "mutable",
                        "name": "a",
                        "nameLocation": "1051:1:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 6433,
                        "src": "1043:9:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6421,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1043:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6424,
                        "mutability": "mutable",
                        "name": "b",
                        "nameLocation": "1062:1:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 6433,
                        "src": "1054:9:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6423,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1054:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1042:22:28"
                  },
                  "returnParameters": {
                    "id": 6430,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6427,
                        "mutability": "mutable",
                        "name": "high",
                        "nameLocation": "1096:4:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 6433,
                        "src": "1088:12:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6426,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1088:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6429,
                        "mutability": "mutable",
                        "name": "low",
                        "nameLocation": "1110:3:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 6433,
                        "src": "1102:11:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6428,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1102:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1087:27:28"
                  },
                  "scope": 8014,
                  "src": "1027:550:28",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 6467,
                    "nodeType": "Block",
                    "src": "1784:149:28",
                    "statements": [
                      {
                        "id": 6466,
                        "nodeType": "UncheckedBlock",
                        "src": "1794:133:28",
                        "statements": [
                          {
                            "assignments": [
                              6446
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 6446,
                                "mutability": "mutable",
                                "name": "c",
                                "nameLocation": "1826:1:28",
                                "nodeType": "VariableDeclaration",
                                "scope": 6466,
                                "src": "1818:9:28",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 6445,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "1818:7:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 6450,
                            "initialValue": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 6449,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 6447,
                                "name": "a",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6436,
                                "src": "1830:1:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "id": 6448,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6438,
                                "src": "1834:1:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "1830:5:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "1818:17:28"
                          },
                          {
                            "expression": {
                              "id": 6455,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 6451,
                                "name": "success",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6441,
                                "src": "1849:7:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 6454,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 6452,
                                  "name": "c",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6446,
                                  "src": "1859:1:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">=",
                                "rightExpression": {
                                  "id": 6453,
                                  "name": "a",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6436,
                                  "src": "1864:1:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "1859:6:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "1849:16:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 6456,
                            "nodeType": "ExpressionStatement",
                            "src": "1849:16:28"
                          },
                          {
                            "expression": {
                              "id": 6464,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 6457,
                                "name": "result",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6443,
                                "src": "1879:6:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 6463,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 6458,
                                  "name": "c",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6446,
                                  "src": "1888:1:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "*",
                                "rightExpression": {
                                  "arguments": [
                                    {
                                      "id": 6461,
                                      "name": "success",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6441,
                                      "src": "1908:7:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    ],
                                    "expression": {
                                      "id": 6459,
                                      "name": "SafeCast",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 9779,
                                      "src": "1892:8:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_SafeCast_$9779_$",
                                        "typeString": "type(library SafeCast)"
                                      }
                                    },
                                    "id": 6460,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "1901:6:28",
                                    "memberName": "toUint",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 9778,
                                    "src": "1892:15:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_bool_$returns$_t_uint256_$",
                                      "typeString": "function (bool) pure returns (uint256)"
                                    }
                                  },
                                  "id": 6462,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "1892:24:28",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "1888:28:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "1879:37:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 6465,
                            "nodeType": "ExpressionStatement",
                            "src": "1879:37:28"
                          }
                        ]
                      }
                    ]
                  },
                  "documentation": {
                    "id": 6434,
                    "nodeType": "StructuredDocumentation",
                    "src": "1583:105:28",
                    "text": " @dev Returns the addition of two unsigned integers, with a success flag (no overflow)."
                  },
                  "id": 6468,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "tryAdd",
                  "nameLocation": "1702:6:28",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 6439,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6436,
                        "mutability": "mutable",
                        "name": "a",
                        "nameLocation": "1717:1:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 6468,
                        "src": "1709:9:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6435,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1709:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6438,
                        "mutability": "mutable",
                        "name": "b",
                        "nameLocation": "1728:1:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 6468,
                        "src": "1720:9:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6437,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1720:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1708:22:28"
                  },
                  "returnParameters": {
                    "id": 6444,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6441,
                        "mutability": "mutable",
                        "name": "success",
                        "nameLocation": "1759:7:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 6468,
                        "src": "1754:12:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 6440,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "1754:4:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6443,
                        "mutability": "mutable",
                        "name": "result",
                        "nameLocation": "1776:6:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 6468,
                        "src": "1768:14:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6442,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1768:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1753:30:28"
                  },
                  "scope": 8014,
                  "src": "1693:240:28",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 6502,
                    "nodeType": "Block",
                    "src": "2143:149:28",
                    "statements": [
                      {
                        "id": 6501,
                        "nodeType": "UncheckedBlock",
                        "src": "2153:133:28",
                        "statements": [
                          {
                            "assignments": [
                              6481
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 6481,
                                "mutability": "mutable",
                                "name": "c",
                                "nameLocation": "2185:1:28",
                                "nodeType": "VariableDeclaration",
                                "scope": 6501,
                                "src": "2177:9:28",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 6480,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "2177:7:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 6485,
                            "initialValue": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 6484,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 6482,
                                "name": "a",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6471,
                                "src": "2189:1:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "-",
                              "rightExpression": {
                                "id": 6483,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6473,
                                "src": "2193:1:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "2189:5:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "2177:17:28"
                          },
                          {
                            "expression": {
                              "id": 6490,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 6486,
                                "name": "success",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6476,
                                "src": "2208:7:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 6489,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 6487,
                                  "name": "c",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6481,
                                  "src": "2218:1:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<=",
                                "rightExpression": {
                                  "id": 6488,
                                  "name": "a",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6471,
                                  "src": "2223:1:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "2218:6:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "2208:16:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 6491,
                            "nodeType": "ExpressionStatement",
                            "src": "2208:16:28"
                          },
                          {
                            "expression": {
                              "id": 6499,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 6492,
                                "name": "result",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6478,
                                "src": "2238:6:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 6498,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 6493,
                                  "name": "c",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6481,
                                  "src": "2247:1:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "*",
                                "rightExpression": {
                                  "arguments": [
                                    {
                                      "id": 6496,
                                      "name": "success",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6476,
                                      "src": "2267:7:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    ],
                                    "expression": {
                                      "id": 6494,
                                      "name": "SafeCast",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 9779,
                                      "src": "2251:8:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_SafeCast_$9779_$",
                                        "typeString": "type(library SafeCast)"
                                      }
                                    },
                                    "id": 6495,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "2260:6:28",
                                    "memberName": "toUint",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 9778,
                                    "src": "2251:15:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_bool_$returns$_t_uint256_$",
                                      "typeString": "function (bool) pure returns (uint256)"
                                    }
                                  },
                                  "id": 6497,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "2251:24:28",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "2247:28:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "2238:37:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 6500,
                            "nodeType": "ExpressionStatement",
                            "src": "2238:37:28"
                          }
                        ]
                      }
                    ]
                  },
                  "documentation": {
                    "id": 6469,
                    "nodeType": "StructuredDocumentation",
                    "src": "1939:108:28",
                    "text": " @dev Returns the subtraction of two unsigned integers, with a success flag (no overflow)."
                  },
                  "id": 6503,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "trySub",
                  "nameLocation": "2061:6:28",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 6474,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6471,
                        "mutability": "mutable",
                        "name": "a",
                        "nameLocation": "2076:1:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 6503,
                        "src": "2068:9:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6470,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2068:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6473,
                        "mutability": "mutable",
                        "name": "b",
                        "nameLocation": "2087:1:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 6503,
                        "src": "2079:9:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6472,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2079:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2067:22:28"
                  },
                  "returnParameters": {
                    "id": 6479,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6476,
                        "mutability": "mutable",
                        "name": "success",
                        "nameLocation": "2118:7:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 6503,
                        "src": "2113:12:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 6475,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "2113:4:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6478,
                        "mutability": "mutable",
                        "name": "result",
                        "nameLocation": "2135:6:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 6503,
                        "src": "2127:14:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6477,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2127:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2112:30:28"
                  },
                  "scope": 8014,
                  "src": "2052:240:28",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 6532,
                    "nodeType": "Block",
                    "src": "2505:391:28",
                    "statements": [
                      {
                        "id": 6531,
                        "nodeType": "UncheckedBlock",
                        "src": "2515:375:28",
                        "statements": [
                          {
                            "assignments": [
                              6516
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 6516,
                                "mutability": "mutable",
                                "name": "c",
                                "nameLocation": "2547:1:28",
                                "nodeType": "VariableDeclaration",
                                "scope": 6531,
                                "src": "2539:9:28",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 6515,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "2539:7:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 6520,
                            "initialValue": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 6519,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 6517,
                                "name": "a",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6506,
                                "src": "2551:1:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "*",
                              "rightExpression": {
                                "id": 6518,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6508,
                                "src": "2555:1:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "2551:5:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "2539:17:28"
                          },
                          {
                            "AST": {
                              "nativeSrc": "2595:188:28",
                              "nodeType": "YulBlock",
                              "src": "2595:188:28",
                              "statements": [
                                {
                                  "nativeSrc": "2727:42:28",
                                  "nodeType": "YulAssignment",
                                  "src": "2727:42:28",
                                  "value": {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "c",
                                                "nativeSrc": "2748:1:28",
                                                "nodeType": "YulIdentifier",
                                                "src": "2748:1:28"
                                              },
                                              {
                                                "name": "a",
                                                "nativeSrc": "2751:1:28",
                                                "nodeType": "YulIdentifier",
                                                "src": "2751:1:28"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "div",
                                              "nativeSrc": "2744:3:28",
                                              "nodeType": "YulIdentifier",
                                              "src": "2744:3:28"
                                            },
                                            "nativeSrc": "2744:9:28",
                                            "nodeType": "YulFunctionCall",
                                            "src": "2744:9:28"
                                          },
                                          {
                                            "name": "b",
                                            "nativeSrc": "2755:1:28",
                                            "nodeType": "YulIdentifier",
                                            "src": "2755:1:28"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "eq",
                                          "nativeSrc": "2741:2:28",
                                          "nodeType": "YulIdentifier",
                                          "src": "2741:2:28"
                                        },
                                        "nativeSrc": "2741:16:28",
                                        "nodeType": "YulFunctionCall",
                                        "src": "2741:16:28"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "a",
                                            "nativeSrc": "2766:1:28",
                                            "nodeType": "YulIdentifier",
                                            "src": "2766:1:28"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "iszero",
                                          "nativeSrc": "2759:6:28",
                                          "nodeType": "YulIdentifier",
                                          "src": "2759:6:28"
                                        },
                                        "nativeSrc": "2759:9:28",
                                        "nodeType": "YulFunctionCall",
                                        "src": "2759:9:28"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "or",
                                      "nativeSrc": "2738:2:28",
                                      "nodeType": "YulIdentifier",
                                      "src": "2738:2:28"
                                    },
                                    "nativeSrc": "2738:31:28",
                                    "nodeType": "YulFunctionCall",
                                    "src": "2738:31:28"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "success",
                                      "nativeSrc": "2727:7:28",
                                      "nodeType": "YulIdentifier",
                                      "src": "2727:7:28"
                                    }
                                  ]
                                }
                              ]
                            },
                            "evmVersion": "paris",
                            "externalReferences": [
                              {
                                "declaration": 6506,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "2751:1:28",
                                "valueSize": 1
                              },
                              {
                                "declaration": 6506,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "2766:1:28",
                                "valueSize": 1
                              },
                              {
                                "declaration": 6508,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "2755:1:28",
                                "valueSize": 1
                              },
                              {
                                "declaration": 6516,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "2748:1:28",
                                "valueSize": 1
                              },
                              {
                                "declaration": 6511,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "2727:7:28",
                                "valueSize": 1
                              }
                            ],
                            "flags": [
                              "memory-safe"
                            ],
                            "id": 6521,
                            "nodeType": "InlineAssembly",
                            "src": "2570:213:28"
                          },
                          {
                            "expression": {
                              "id": 6529,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 6522,
                                "name": "result",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6513,
                                "src": "2842:6:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 6528,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 6523,
                                  "name": "c",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6516,
                                  "src": "2851:1:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "*",
                                "rightExpression": {
                                  "arguments": [
                                    {
                                      "id": 6526,
                                      "name": "success",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6511,
                                      "src": "2871:7:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    ],
                                    "expression": {
                                      "id": 6524,
                                      "name": "SafeCast",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 9779,
                                      "src": "2855:8:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_SafeCast_$9779_$",
                                        "typeString": "type(library SafeCast)"
                                      }
                                    },
                                    "id": 6525,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "2864:6:28",
                                    "memberName": "toUint",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 9778,
                                    "src": "2855:15:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_bool_$returns$_t_uint256_$",
                                      "typeString": "function (bool) pure returns (uint256)"
                                    }
                                  },
                                  "id": 6527,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "2855:24:28",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "2851:28:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "2842:37:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 6530,
                            "nodeType": "ExpressionStatement",
                            "src": "2842:37:28"
                          }
                        ]
                      }
                    ]
                  },
                  "documentation": {
                    "id": 6504,
                    "nodeType": "StructuredDocumentation",
                    "src": "2298:111:28",
                    "text": " @dev Returns the multiplication of two unsigned integers, with a success flag (no overflow)."
                  },
                  "id": 6533,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "tryMul",
                  "nameLocation": "2423:6:28",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 6509,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6506,
                        "mutability": "mutable",
                        "name": "a",
                        "nameLocation": "2438:1:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 6533,
                        "src": "2430:9:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6505,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2430:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6508,
                        "mutability": "mutable",
                        "name": "b",
                        "nameLocation": "2449:1:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 6533,
                        "src": "2441:9:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6507,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2441:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2429:22:28"
                  },
                  "returnParameters": {
                    "id": 6514,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6511,
                        "mutability": "mutable",
                        "name": "success",
                        "nameLocation": "2480:7:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 6533,
                        "src": "2475:12:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 6510,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "2475:4:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6513,
                        "mutability": "mutable",
                        "name": "result",
                        "nameLocation": "2497:6:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 6533,
                        "src": "2489:14:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6512,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2489:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2474:30:28"
                  },
                  "scope": 8014,
                  "src": "2414:482:28",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 6553,
                    "nodeType": "Block",
                    "src": "3111:231:28",
                    "statements": [
                      {
                        "id": 6552,
                        "nodeType": "UncheckedBlock",
                        "src": "3121:215:28",
                        "statements": [
                          {
                            "expression": {
                              "id": 6549,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 6545,
                                "name": "success",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6541,
                                "src": "3145:7:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 6548,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 6546,
                                  "name": "b",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6538,
                                  "src": "3155:1:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">",
                                "rightExpression": {
                                  "hexValue": "30",
                                  "id": 6547,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3159:1:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "3155:5:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "3145:15:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 6550,
                            "nodeType": "ExpressionStatement",
                            "src": "3145:15:28"
                          },
                          {
                            "AST": {
                              "nativeSrc": "3199:127:28",
                              "nodeType": "YulBlock",
                              "src": "3199:127:28",
                              "statements": [
                                {
                                  "nativeSrc": "3293:19:28",
                                  "nodeType": "YulAssignment",
                                  "src": "3293:19:28",
                                  "value": {
                                    "arguments": [
                                      {
                                        "name": "a",
                                        "nativeSrc": "3307:1:28",
                                        "nodeType": "YulIdentifier",
                                        "src": "3307:1:28"
                                      },
                                      {
                                        "name": "b",
                                        "nativeSrc": "3310:1:28",
                                        "nodeType": "YulIdentifier",
                                        "src": "3310:1:28"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "div",
                                      "nativeSrc": "3303:3:28",
                                      "nodeType": "YulIdentifier",
                                      "src": "3303:3:28"
                                    },
                                    "nativeSrc": "3303:9:28",
                                    "nodeType": "YulFunctionCall",
                                    "src": "3303:9:28"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "result",
                                      "nativeSrc": "3293:6:28",
                                      "nodeType": "YulIdentifier",
                                      "src": "3293:6:28"
                                    }
                                  ]
                                }
                              ]
                            },
                            "evmVersion": "paris",
                            "externalReferences": [
                              {
                                "declaration": 6536,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "3307:1:28",
                                "valueSize": 1
                              },
                              {
                                "declaration": 6538,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "3310:1:28",
                                "valueSize": 1
                              },
                              {
                                "declaration": 6543,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "3293:6:28",
                                "valueSize": 1
                              }
                            ],
                            "flags": [
                              "memory-safe"
                            ],
                            "id": 6551,
                            "nodeType": "InlineAssembly",
                            "src": "3174:152:28"
                          }
                        ]
                      }
                    ]
                  },
                  "documentation": {
                    "id": 6534,
                    "nodeType": "StructuredDocumentation",
                    "src": "2902:113:28",
                    "text": " @dev Returns the division of two unsigned integers, with a success flag (no division by zero)."
                  },
                  "id": 6554,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "tryDiv",
                  "nameLocation": "3029:6:28",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 6539,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6536,
                        "mutability": "mutable",
                        "name": "a",
                        "nameLocation": "3044:1:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 6554,
                        "src": "3036:9:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6535,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3036:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6538,
                        "mutability": "mutable",
                        "name": "b",
                        "nameLocation": "3055:1:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 6554,
                        "src": "3047:9:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6537,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3047:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3035:22:28"
                  },
                  "returnParameters": {
                    "id": 6544,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6541,
                        "mutability": "mutable",
                        "name": "success",
                        "nameLocation": "3086:7:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 6554,
                        "src": "3081:12:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 6540,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "3081:4:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6543,
                        "mutability": "mutable",
                        "name": "result",
                        "nameLocation": "3103:6:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 6554,
                        "src": "3095:14:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6542,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3095:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3080:30:28"
                  },
                  "scope": 8014,
                  "src": "3020:322:28",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 6574,
                    "nodeType": "Block",
                    "src": "3567:231:28",
                    "statements": [
                      {
                        "id": 6573,
                        "nodeType": "UncheckedBlock",
                        "src": "3577:215:28",
                        "statements": [
                          {
                            "expression": {
                              "id": 6570,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 6566,
                                "name": "success",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6562,
                                "src": "3601:7:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 6569,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 6567,
                                  "name": "b",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6559,
                                  "src": "3611:1:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">",
                                "rightExpression": {
                                  "hexValue": "30",
                                  "id": 6568,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3615:1:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "3611:5:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "3601:15:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 6571,
                            "nodeType": "ExpressionStatement",
                            "src": "3601:15:28"
                          },
                          {
                            "AST": {
                              "nativeSrc": "3655:127:28",
                              "nodeType": "YulBlock",
                              "src": "3655:127:28",
                              "statements": [
                                {
                                  "nativeSrc": "3749:19:28",
                                  "nodeType": "YulAssignment",
                                  "src": "3749:19:28",
                                  "value": {
                                    "arguments": [
                                      {
                                        "name": "a",
                                        "nativeSrc": "3763:1:28",
                                        "nodeType": "YulIdentifier",
                                        "src": "3763:1:28"
                                      },
                                      {
                                        "name": "b",
                                        "nativeSrc": "3766:1:28",
                                        "nodeType": "YulIdentifier",
                                        "src": "3766:1:28"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mod",
                                      "nativeSrc": "3759:3:28",
                                      "nodeType": "YulIdentifier",
                                      "src": "3759:3:28"
                                    },
                                    "nativeSrc": "3759:9:28",
                                    "nodeType": "YulFunctionCall",
                                    "src": "3759:9:28"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "result",
                                      "nativeSrc": "3749:6:28",
                                      "nodeType": "YulIdentifier",
                                      "src": "3749:6:28"
                                    }
                                  ]
                                }
                              ]
                            },
                            "evmVersion": "paris",
                            "externalReferences": [
                              {
                                "declaration": 6557,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "3763:1:28",
                                "valueSize": 1
                              },
                              {
                                "declaration": 6559,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "3766:1:28",
                                "valueSize": 1
                              },
                              {
                                "declaration": 6564,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "3749:6:28",
                                "valueSize": 1
                              }
                            ],
                            "flags": [
                              "memory-safe"
                            ],
                            "id": 6572,
                            "nodeType": "InlineAssembly",
                            "src": "3630:152:28"
                          }
                        ]
                      }
                    ]
                  },
                  "documentation": {
                    "id": 6555,
                    "nodeType": "StructuredDocumentation",
                    "src": "3348:123:28",
                    "text": " @dev Returns the remainder of dividing two unsigned integers, with a success flag (no division by zero)."
                  },
                  "id": 6575,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "tryMod",
                  "nameLocation": "3485:6:28",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 6560,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6557,
                        "mutability": "mutable",
                        "name": "a",
                        "nameLocation": "3500:1:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 6575,
                        "src": "3492:9:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6556,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3492:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6559,
                        "mutability": "mutable",
                        "name": "b",
                        "nameLocation": "3511:1:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 6575,
                        "src": "3503:9:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6558,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3503:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3491:22:28"
                  },
                  "returnParameters": {
                    "id": 6565,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6562,
                        "mutability": "mutable",
                        "name": "success",
                        "nameLocation": "3542:7:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 6575,
                        "src": "3537:12:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 6561,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "3537:4:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6564,
                        "mutability": "mutable",
                        "name": "result",
                        "nameLocation": "3559:6:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 6575,
                        "src": "3551:14:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6563,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3551:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3536:30:28"
                  },
                  "scope": 8014,
                  "src": "3476:322:28",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 6604,
                    "nodeType": "Block",
                    "src": "3989:122:28",
                    "statements": [
                      {
                        "assignments": [
                          6586,
                          6588
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 6586,
                            "mutability": "mutable",
                            "name": "success",
                            "nameLocation": "4005:7:28",
                            "nodeType": "VariableDeclaration",
                            "scope": 6604,
                            "src": "4000:12:28",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 6585,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "4000:4:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 6588,
                            "mutability": "mutable",
                            "name": "result",
                            "nameLocation": "4022:6:28",
                            "nodeType": "VariableDeclaration",
                            "scope": 6604,
                            "src": "4014:14:28",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 6587,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "4014:7:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 6593,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 6590,
                              "name": "a",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6578,
                              "src": "4039:1:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 6591,
                              "name": "b",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6580,
                              "src": "4042:1:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 6589,
                            "name": "tryAdd",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6468,
                            "src": "4032:6:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (bool,uint256)"
                            }
                          },
                          "id": 6592,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4032:12:28",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$",
                            "typeString": "tuple(bool,uint256)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3999:45:28"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 6595,
                              "name": "success",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6586,
                              "src": "4069:7:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "id": 6596,
                              "name": "result",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6588,
                              "src": "4078:6:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 6599,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "4091:7:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    },
                                    "typeName": {
                                      "id": 6598,
                                      "name": "uint256",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "4091:7:28",
                                      "typeDescriptions": {}
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    }
                                  ],
                                  "id": 6597,
                                  "name": "type",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -27,
                                  "src": "4086:4:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                    "typeString": "function () pure"
                                  }
                                },
                                "id": 6600,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4086:13:28",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_meta_type_t_uint256",
                                  "typeString": "type(uint256)"
                                }
                              },
                              "id": 6601,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberLocation": "4100:3:28",
                              "memberName": "max",
                              "nodeType": "MemberAccess",
                              "src": "4086:17:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 6594,
                            "name": "ternary",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6682,
                            "src": "4061:7:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (bool,uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 6602,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4061:43:28",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 6584,
                        "id": 6603,
                        "nodeType": "Return",
                        "src": "4054:50:28"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 6576,
                    "nodeType": "StructuredDocumentation",
                    "src": "3804:103:28",
                    "text": " @dev Unsigned saturating addition, bounds to `2²⁵⁶ - 1` instead of overflowing."
                  },
                  "id": 6605,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "saturatingAdd",
                  "nameLocation": "3921:13:28",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 6581,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6578,
                        "mutability": "mutable",
                        "name": "a",
                        "nameLocation": "3943:1:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 6605,
                        "src": "3935:9:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6577,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3935:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6580,
                        "mutability": "mutable",
                        "name": "b",
                        "nameLocation": "3954:1:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 6605,
                        "src": "3946:9:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6579,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3946:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3934:22:28"
                  },
                  "returnParameters": {
                    "id": 6584,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6583,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 6605,
                        "src": "3980:7:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6582,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3980:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3979:9:28"
                  },
                  "scope": 8014,
                  "src": "3912:199:28",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 6624,
                    "nodeType": "Block",
                    "src": "4294:73:28",
                    "statements": [
                      {
                        "assignments": [
                          null,
                          6616
                        ],
                        "declarations": [
                          null,
                          {
                            "constant": false,
                            "id": 6616,
                            "mutability": "mutable",
                            "name": "result",
                            "nameLocation": "4315:6:28",
                            "nodeType": "VariableDeclaration",
                            "scope": 6624,
                            "src": "4307:14:28",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 6615,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "4307:7:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 6621,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 6618,
                              "name": "a",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6608,
                              "src": "4332:1:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 6619,
                              "name": "b",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6610,
                              "src": "4335:1:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 6617,
                            "name": "trySub",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6503,
                            "src": "4325:6:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (bool,uint256)"
                            }
                          },
                          "id": 6620,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4325:12:28",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$",
                            "typeString": "tuple(bool,uint256)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4304:33:28"
                      },
                      {
                        "expression": {
                          "id": 6622,
                          "name": "result",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6616,
                          "src": "4354:6:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 6614,
                        "id": 6623,
                        "nodeType": "Return",
                        "src": "4347:13:28"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 6606,
                    "nodeType": "StructuredDocumentation",
                    "src": "4117:95:28",
                    "text": " @dev Unsigned saturating subtraction, bounds to zero instead of overflowing."
                  },
                  "id": 6625,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "saturatingSub",
                  "nameLocation": "4226:13:28",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 6611,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6608,
                        "mutability": "mutable",
                        "name": "a",
                        "nameLocation": "4248:1:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 6625,
                        "src": "4240:9:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6607,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4240:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6610,
                        "mutability": "mutable",
                        "name": "b",
                        "nameLocation": "4259:1:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 6625,
                        "src": "4251:9:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6609,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4251:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4239:22:28"
                  },
                  "returnParameters": {
                    "id": 6614,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6613,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 6625,
                        "src": "4285:7:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6612,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4285:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4284:9:28"
                  },
                  "scope": 8014,
                  "src": "4217:150:28",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 6654,
                    "nodeType": "Block",
                    "src": "4564:122:28",
                    "statements": [
                      {
                        "assignments": [
                          6636,
                          6638
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 6636,
                            "mutability": "mutable",
                            "name": "success",
                            "nameLocation": "4580:7:28",
                            "nodeType": "VariableDeclaration",
                            "scope": 6654,
                            "src": "4575:12:28",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 6635,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "4575:4:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 6638,
                            "mutability": "mutable",
                            "name": "result",
                            "nameLocation": "4597:6:28",
                            "nodeType": "VariableDeclaration",
                            "scope": 6654,
                            "src": "4589:14:28",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 6637,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "4589:7:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 6643,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 6640,
                              "name": "a",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6628,
                              "src": "4614:1:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 6641,
                              "name": "b",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6630,
                              "src": "4617:1:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 6639,
                            "name": "tryMul",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6533,
                            "src": "4607:6:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (bool,uint256)"
                            }
                          },
                          "id": 6642,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4607:12:28",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$",
                            "typeString": "tuple(bool,uint256)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "4574:45:28"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 6645,
                              "name": "success",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6636,
                              "src": "4644:7:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "id": 6646,
                              "name": "result",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6638,
                              "src": "4653:6:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 6649,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "4666:7:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    },
                                    "typeName": {
                                      "id": 6648,
                                      "name": "uint256",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "4666:7:28",
                                      "typeDescriptions": {}
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    }
                                  ],
                                  "id": 6647,
                                  "name": "type",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -27,
                                  "src": "4661:4:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                    "typeString": "function () pure"
                                  }
                                },
                                "id": 6650,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4661:13:28",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_meta_type_t_uint256",
                                  "typeString": "type(uint256)"
                                }
                              },
                              "id": 6651,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberLocation": "4675:3:28",
                              "memberName": "max",
                              "nodeType": "MemberAccess",
                              "src": "4661:17:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 6644,
                            "name": "ternary",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6682,
                            "src": "4636:7:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (bool,uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 6652,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4636:43:28",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 6634,
                        "id": 6653,
                        "nodeType": "Return",
                        "src": "4629:50:28"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 6626,
                    "nodeType": "StructuredDocumentation",
                    "src": "4373:109:28",
                    "text": " @dev Unsigned saturating multiplication, bounds to `2²⁵⁶ - 1` instead of overflowing."
                  },
                  "id": 6655,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "saturatingMul",
                  "nameLocation": "4496:13:28",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 6631,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6628,
                        "mutability": "mutable",
                        "name": "a",
                        "nameLocation": "4518:1:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 6655,
                        "src": "4510:9:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6627,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4510:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6630,
                        "mutability": "mutable",
                        "name": "b",
                        "nameLocation": "4529:1:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 6655,
                        "src": "4521:9:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6629,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4521:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4509:22:28"
                  },
                  "returnParameters": {
                    "id": 6634,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6633,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 6655,
                        "src": "4555:7:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6632,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4555:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4554:9:28"
                  },
                  "scope": 8014,
                  "src": "4487:199:28",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 6681,
                    "nodeType": "Block",
                    "src": "5158:207:28",
                    "statements": [
                      {
                        "id": 6680,
                        "nodeType": "UncheckedBlock",
                        "src": "5168:191:28",
                        "statements": [
                          {
                            "expression": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 6678,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 6667,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6662,
                                "src": "5306:1:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "^",
                              "rightExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 6676,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "components": [
                                        {
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 6670,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "id": 6668,
                                            "name": "a",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6660,
                                            "src": "5312:1:28",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "^",
                                          "rightExpression": {
                                            "id": 6669,
                                            "name": "b",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6662,
                                            "src": "5316:1:28",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "src": "5312:5:28",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "id": 6671,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "TupleExpression",
                                      "src": "5311:7:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "*",
                                    "rightExpression": {
                                      "arguments": [
                                        {
                                          "id": 6674,
                                          "name": "condition",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6658,
                                          "src": "5337:9:28",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                          }
                                        ],
                                        "expression": {
                                          "id": 6672,
                                          "name": "SafeCast",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 9779,
                                          "src": "5321:8:28",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_contract$_SafeCast_$9779_$",
                                            "typeString": "type(library SafeCast)"
                                          }
                                        },
                                        "id": 6673,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberLocation": "5330:6:28",
                                        "memberName": "toUint",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 9778,
                                        "src": "5321:15:28",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_pure$_t_bool_$returns$_t_uint256_$",
                                          "typeString": "function (bool) pure returns (uint256)"
                                        }
                                      },
                                      "id": 6675,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "nameLocations": [],
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "5321:26:28",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "5311:36:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 6677,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "5310:38:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "5306:42:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "functionReturnParameters": 6666,
                            "id": 6679,
                            "nodeType": "Return",
                            "src": "5299:49:28"
                          }
                        ]
                      }
                    ]
                  },
                  "documentation": {
                    "id": 6656,
                    "nodeType": "StructuredDocumentation",
                    "src": "4692:374:28",
                    "text": " @dev Branchless ternary evaluation for `a ? b : c`. Gas costs are constant.\n IMPORTANT: This function may reduce bytecode size and consume less gas when used standalone.\n However, the compiler may optimize Solidity ternary operations (i.e. `a ? b : c`) to only compute\n one branch when needed, making this function more expensive."
                  },
                  "id": 6682,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "ternary",
                  "nameLocation": "5080:7:28",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 6663,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6658,
                        "mutability": "mutable",
                        "name": "condition",
                        "nameLocation": "5093:9:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 6682,
                        "src": "5088:14:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 6657,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "5088:4:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6660,
                        "mutability": "mutable",
                        "name": "a",
                        "nameLocation": "5112:1:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 6682,
                        "src": "5104:9:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6659,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5104:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6662,
                        "mutability": "mutable",
                        "name": "b",
                        "nameLocation": "5123:1:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 6682,
                        "src": "5115:9:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6661,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5115:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5087:38:28"
                  },
                  "returnParameters": {
                    "id": 6666,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6665,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 6682,
                        "src": "5149:7:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6664,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5149:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5148:9:28"
                  },
                  "scope": 8014,
                  "src": "5071:294:28",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 6700,
                    "nodeType": "Block",
                    "src": "5502:44:28",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 6695,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 6693,
                                "name": "a",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6685,
                                "src": "5527:1:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "id": 6694,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6687,
                                "src": "5531:1:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "5527:5:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "id": 6696,
                              "name": "a",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6685,
                              "src": "5534:1:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 6697,
                              "name": "b",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6687,
                              "src": "5537:1:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 6692,
                            "name": "ternary",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6682,
                            "src": "5519:7:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (bool,uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 6698,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5519:20:28",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 6691,
                        "id": 6699,
                        "nodeType": "Return",
                        "src": "5512:27:28"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 6683,
                    "nodeType": "StructuredDocumentation",
                    "src": "5371:59:28",
                    "text": " @dev Returns the largest of two numbers."
                  },
                  "id": 6701,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "max",
                  "nameLocation": "5444:3:28",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 6688,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6685,
                        "mutability": "mutable",
                        "name": "a",
                        "nameLocation": "5456:1:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 6701,
                        "src": "5448:9:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6684,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5448:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6687,
                        "mutability": "mutable",
                        "name": "b",
                        "nameLocation": "5467:1:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 6701,
                        "src": "5459:9:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6686,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5459:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5447:22:28"
                  },
                  "returnParameters": {
                    "id": 6691,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6690,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 6701,
                        "src": "5493:7:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6689,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5493:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5492:9:28"
                  },
                  "scope": 8014,
                  "src": "5435:111:28",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 6719,
                    "nodeType": "Block",
                    "src": "5684:44:28",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 6714,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 6712,
                                "name": "a",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6704,
                                "src": "5709:1:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<",
                              "rightExpression": {
                                "id": 6713,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6706,
                                "src": "5713:1:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "5709:5:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "id": 6715,
                              "name": "a",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6704,
                              "src": "5716:1:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 6716,
                              "name": "b",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6706,
                              "src": "5719:1:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 6711,
                            "name": "ternary",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6682,
                            "src": "5701:7:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (bool,uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 6717,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5701:20:28",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 6710,
                        "id": 6718,
                        "nodeType": "Return",
                        "src": "5694:27:28"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 6702,
                    "nodeType": "StructuredDocumentation",
                    "src": "5552:60:28",
                    "text": " @dev Returns the smallest of two numbers."
                  },
                  "id": 6720,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "min",
                  "nameLocation": "5626:3:28",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 6707,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6704,
                        "mutability": "mutable",
                        "name": "a",
                        "nameLocation": "5638:1:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 6720,
                        "src": "5630:9:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6703,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5630:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6706,
                        "mutability": "mutable",
                        "name": "b",
                        "nameLocation": "5649:1:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 6720,
                        "src": "5641:9:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6705,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5641:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5629:22:28"
                  },
                  "returnParameters": {
                    "id": 6710,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6709,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 6720,
                        "src": "5675:7:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6708,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5675:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5674:9:28"
                  },
                  "scope": 8014,
                  "src": "5617:111:28",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 6742,
                    "nodeType": "Block",
                    "src": "5912:82:28",
                    "statements": [
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 6740,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "components": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 6732,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 6730,
                                  "name": "a",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6723,
                                  "src": "5967:1:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "&",
                                "rightExpression": {
                                  "id": 6731,
                                  "name": "b",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6725,
                                  "src": "5971:1:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "5967:5:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 6733,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "5966:7:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 6739,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "components": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 6736,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 6734,
                                    "name": "a",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6723,
                                    "src": "5977:1:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "^",
                                  "rightExpression": {
                                    "id": 6735,
                                    "name": "b",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6725,
                                    "src": "5981:1:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "5977:5:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 6737,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "5976:7:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "/",
                            "rightExpression": {
                              "hexValue": "32",
                              "id": 6738,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5986:1:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "2"
                            },
                            "src": "5976:11:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "5966:21:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 6729,
                        "id": 6741,
                        "nodeType": "Return",
                        "src": "5959:28:28"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 6721,
                    "nodeType": "StructuredDocumentation",
                    "src": "5734:102:28",
                    "text": " @dev Returns the average of two numbers. The result is rounded towards\n zero."
                  },
                  "id": 6743,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "average",
                  "nameLocation": "5850:7:28",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 6726,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6723,
                        "mutability": "mutable",
                        "name": "a",
                        "nameLocation": "5866:1:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 6743,
                        "src": "5858:9:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6722,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5858:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6725,
                        "mutability": "mutable",
                        "name": "b",
                        "nameLocation": "5877:1:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 6743,
                        "src": "5869:9:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6724,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5869:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5857:22:28"
                  },
                  "returnParameters": {
                    "id": 6729,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6728,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 6743,
                        "src": "5903:7:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6727,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5903:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5902:9:28"
                  },
                  "scope": 8014,
                  "src": "5841:153:28",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 6783,
                    "nodeType": "Block",
                    "src": "6286:633:28",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 6755,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 6753,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6748,
                            "src": "6300:1:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 6754,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "6305:1:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "6300:6:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 6764,
                        "nodeType": "IfStatement",
                        "src": "6296:150:28",
                        "trueBody": {
                          "id": 6763,
                          "nodeType": "Block",
                          "src": "6308:138:28",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "expression": {
                                      "id": 6759,
                                      "name": "Panic",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4725,
                                      "src": "6412:5:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_Panic_$4725_$",
                                        "typeString": "type(library Panic)"
                                      }
                                    },
                                    "id": 6760,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberLocation": "6418:16:28",
                                    "memberName": "DIVISION_BY_ZERO",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 4692,
                                    "src": "6412:22:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "id": 6756,
                                    "name": "Panic",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4725,
                                    "src": "6400:5:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_Panic_$4725_$",
                                      "typeString": "type(library Panic)"
                                    }
                                  },
                                  "id": 6758,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "6406:5:28",
                                  "memberName": "panic",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 4724,
                                  "src": "6400:11:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$__$",
                                    "typeString": "function (uint256) pure"
                                  }
                                },
                                "id": 6761,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "6400:35:28",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 6762,
                              "nodeType": "ExpressionStatement",
                              "src": "6400:35:28"
                            }
                          ]
                        }
                      },
                      {
                        "id": 6782,
                        "nodeType": "UncheckedBlock",
                        "src": "6829:84:28",
                        "statements": [
                          {
                            "expression": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 6780,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "arguments": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 6769,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 6767,
                                      "name": "a",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6746,
                                      "src": "6876:1:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": ">",
                                    "rightExpression": {
                                      "hexValue": "30",
                                      "id": 6768,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "6880:1:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    },
                                    "src": "6876:5:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  ],
                                  "expression": {
                                    "id": 6765,
                                    "name": "SafeCast",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9779,
                                    "src": "6860:8:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_SafeCast_$9779_$",
                                      "typeString": "type(library SafeCast)"
                                    }
                                  },
                                  "id": 6766,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "6869:6:28",
                                  "memberName": "toUint",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 9778,
                                  "src": "6860:15:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_bool_$returns$_t_uint256_$",
                                    "typeString": "function (bool) pure returns (uint256)"
                                  }
                                },
                                "id": 6770,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "6860:22:28",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "*",
                              "rightExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 6778,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 6776,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "components": [
                                          {
                                            "commonType": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            },
                                            "id": 6773,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                              "id": 6771,
                                              "name": "a",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 6746,
                                              "src": "6887:1:28",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "-",
                                            "rightExpression": {
                                              "hexValue": "31",
                                              "id": 6772,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "number",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "6891:1:28",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_rational_1_by_1",
                                                "typeString": "int_const 1"
                                              },
                                              "value": "1"
                                            },
                                            "src": "6887:5:28",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          }
                                        ],
                                        "id": 6774,
                                        "isConstant": false,
                                        "isInlineArray": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "TupleExpression",
                                        "src": "6886:7:28",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "/",
                                      "rightExpression": {
                                        "id": 6775,
                                        "name": "b",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6748,
                                        "src": "6896:1:28",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "6886:11:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "+",
                                    "rightExpression": {
                                      "hexValue": "31",
                                      "id": 6777,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "6900:1:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "src": "6886:15:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 6779,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "6885:17:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "6860:42:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "functionReturnParameters": 6752,
                            "id": 6781,
                            "nodeType": "Return",
                            "src": "6853:49:28"
                          }
                        ]
                      }
                    ]
                  },
                  "documentation": {
                    "id": 6744,
                    "nodeType": "StructuredDocumentation",
                    "src": "6000:210:28",
                    "text": " @dev Returns the ceiling of the division of two numbers.\n This differs from standard division with `/` in that it rounds towards infinity instead\n of rounding towards zero."
                  },
                  "id": 6784,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "ceilDiv",
                  "nameLocation": "6224:7:28",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 6749,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6746,
                        "mutability": "mutable",
                        "name": "a",
                        "nameLocation": "6240:1:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 6784,
                        "src": "6232:9:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6745,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6232:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6748,
                        "mutability": "mutable",
                        "name": "b",
                        "nameLocation": "6251:1:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 6784,
                        "src": "6243:9:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6747,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6243:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6231:22:28"
                  },
                  "returnParameters": {
                    "id": 6752,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6751,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 6784,
                        "src": "6277:7:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6750,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6277:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6276:9:28"
                  },
                  "scope": 8014,
                  "src": "6215:704:28",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 6919,
                    "nodeType": "Block",
                    "src": "7340:3585:28",
                    "statements": [
                      {
                        "id": 6918,
                        "nodeType": "UncheckedBlock",
                        "src": "7350:3569:28",
                        "statements": [
                          {
                            "assignments": [
                              6797,
                              6799
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 6797,
                                "mutability": "mutable",
                                "name": "high",
                                "nameLocation": "7383:4:28",
                                "nodeType": "VariableDeclaration",
                                "scope": 6918,
                                "src": "7375:12:28",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 6796,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "7375:7:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              },
                              {
                                "constant": false,
                                "id": 6799,
                                "mutability": "mutable",
                                "name": "low",
                                "nameLocation": "7397:3:28",
                                "nodeType": "VariableDeclaration",
                                "scope": 6918,
                                "src": "7389:11:28",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 6798,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "7389:7:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 6804,
                            "initialValue": {
                              "arguments": [
                                {
                                  "id": 6801,
                                  "name": "x",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6787,
                                  "src": "7411:1:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "id": 6802,
                                  "name": "y",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6789,
                                  "src": "7414:1:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 6800,
                                "name": "mul512",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6433,
                                "src": "7404:6:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$",
                                  "typeString": "function (uint256,uint256) pure returns (uint256,uint256)"
                                }
                              },
                              "id": 6803,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "7404:12:28",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                                "typeString": "tuple(uint256,uint256)"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "7374:42:28"
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 6807,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 6805,
                                "name": "high",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6797,
                                "src": "7498:4:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 6806,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "7506:1:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "7498:9:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 6813,
                            "nodeType": "IfStatement",
                            "src": "7494:365:28",
                            "trueBody": {
                              "id": 6812,
                              "nodeType": "Block",
                              "src": "7509:350:28",
                              "statements": [
                                {
                                  "expression": {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 6810,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 6808,
                                      "name": "low",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6799,
                                      "src": "7827:3:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "/",
                                    "rightExpression": {
                                      "id": 6809,
                                      "name": "denominator",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6791,
                                      "src": "7833:11:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "7827:17:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "functionReturnParameters": 6795,
                                  "id": 6811,
                                  "nodeType": "Return",
                                  "src": "7820:24:28"
                                }
                              ]
                            }
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 6816,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 6814,
                                "name": "denominator",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6791,
                                "src": "7969:11:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<=",
                              "rightExpression": {
                                "id": 6815,
                                "name": "high",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6797,
                                "src": "7984:4:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "7969:19:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 6832,
                            "nodeType": "IfStatement",
                            "src": "7965:142:28",
                            "trueBody": {
                              "id": 6831,
                              "nodeType": "Block",
                              "src": "7990:117:28",
                              "statements": [
                                {
                                  "expression": {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "commonType": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            },
                                            "id": 6823,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                              "id": 6821,
                                              "name": "denominator",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 6791,
                                              "src": "8028:11:28",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "==",
                                            "rightExpression": {
                                              "hexValue": "30",
                                              "id": 6822,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "number",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "8043:1:28",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_rational_0_by_1",
                                                "typeString": "int_const 0"
                                              },
                                              "value": "0"
                                            },
                                            "src": "8028:16:28",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_bool",
                                              "typeString": "bool"
                                            }
                                          },
                                          {
                                            "expression": {
                                              "id": 6824,
                                              "name": "Panic",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 4725,
                                              "src": "8046:5:28",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_type$_t_contract$_Panic_$4725_$",
                                                "typeString": "type(library Panic)"
                                              }
                                            },
                                            "id": 6825,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "memberLocation": "8052:16:28",
                                            "memberName": "DIVISION_BY_ZERO",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 4692,
                                            "src": "8046:22:28",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          {
                                            "expression": {
                                              "id": 6826,
                                              "name": "Panic",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 4725,
                                              "src": "8070:5:28",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_type$_t_contract$_Panic_$4725_$",
                                                "typeString": "type(library Panic)"
                                              }
                                            },
                                            "id": 6827,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "memberLocation": "8076:14:28",
                                            "memberName": "UNDER_OVERFLOW",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 4688,
                                            "src": "8070:20:28",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_bool",
                                              "typeString": "bool"
                                            },
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            },
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "id": 6820,
                                          "name": "ternary",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 6682,
                                          "src": "8020:7:28",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                            "typeString": "function (bool,uint256,uint256) pure returns (uint256)"
                                          }
                                        },
                                        "id": 6828,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "nameLocations": [],
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "8020:71:28",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "expression": {
                                        "id": 6817,
                                        "name": "Panic",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4725,
                                        "src": "8008:5:28",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_contract$_Panic_$4725_$",
                                          "typeString": "type(library Panic)"
                                        }
                                      },
                                      "id": 6819,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberLocation": "8014:5:28",
                                      "memberName": "panic",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 4724,
                                      "src": "8008:11:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$__$",
                                        "typeString": "function (uint256) pure"
                                      }
                                    },
                                    "id": 6829,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "8008:84:28",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_tuple$__$",
                                      "typeString": "tuple()"
                                    }
                                  },
                                  "id": 6830,
                                  "nodeType": "ExpressionStatement",
                                  "src": "8008:84:28"
                                }
                              ]
                            }
                          },
                          {
                            "assignments": [
                              6834
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 6834,
                                "mutability": "mutable",
                                "name": "remainder",
                                "nameLocation": "8367:9:28",
                                "nodeType": "VariableDeclaration",
                                "scope": 6918,
                                "src": "8359:17:28",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 6833,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "8359:7:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 6835,
                            "nodeType": "VariableDeclarationStatement",
                            "src": "8359:17:28"
                          },
                          {
                            "AST": {
                              "nativeSrc": "8415:283:28",
                              "nodeType": "YulBlock",
                              "src": "8415:283:28",
                              "statements": [
                                {
                                  "nativeSrc": "8484:38:28",
                                  "nodeType": "YulAssignment",
                                  "src": "8484:38:28",
                                  "value": {
                                    "arguments": [
                                      {
                                        "name": "x",
                                        "nativeSrc": "8504:1:28",
                                        "nodeType": "YulIdentifier",
                                        "src": "8504:1:28"
                                      },
                                      {
                                        "name": "y",
                                        "nativeSrc": "8507:1:28",
                                        "nodeType": "YulIdentifier",
                                        "src": "8507:1:28"
                                      },
                                      {
                                        "name": "denominator",
                                        "nativeSrc": "8510:11:28",
                                        "nodeType": "YulIdentifier",
                                        "src": "8510:11:28"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mulmod",
                                      "nativeSrc": "8497:6:28",
                                      "nodeType": "YulIdentifier",
                                      "src": "8497:6:28"
                                    },
                                    "nativeSrc": "8497:25:28",
                                    "nodeType": "YulFunctionCall",
                                    "src": "8497:25:28"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "remainder",
                                      "nativeSrc": "8484:9:28",
                                      "nodeType": "YulIdentifier",
                                      "src": "8484:9:28"
                                    }
                                  ]
                                },
                                {
                                  "nativeSrc": "8604:37:28",
                                  "nodeType": "YulAssignment",
                                  "src": "8604:37:28",
                                  "value": {
                                    "arguments": [
                                      {
                                        "name": "high",
                                        "nativeSrc": "8616:4:28",
                                        "nodeType": "YulIdentifier",
                                        "src": "8616:4:28"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "remainder",
                                            "nativeSrc": "8625:9:28",
                                            "nodeType": "YulIdentifier",
                                            "src": "8625:9:28"
                                          },
                                          {
                                            "name": "low",
                                            "nativeSrc": "8636:3:28",
                                            "nodeType": "YulIdentifier",
                                            "src": "8636:3:28"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "gt",
                                          "nativeSrc": "8622:2:28",
                                          "nodeType": "YulIdentifier",
                                          "src": "8622:2:28"
                                        },
                                        "nativeSrc": "8622:18:28",
                                        "nodeType": "YulFunctionCall",
                                        "src": "8622:18:28"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nativeSrc": "8612:3:28",
                                      "nodeType": "YulIdentifier",
                                      "src": "8612:3:28"
                                    },
                                    "nativeSrc": "8612:29:28",
                                    "nodeType": "YulFunctionCall",
                                    "src": "8612:29:28"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "high",
                                      "nativeSrc": "8604:4:28",
                                      "nodeType": "YulIdentifier",
                                      "src": "8604:4:28"
                                    }
                                  ]
                                },
                                {
                                  "nativeSrc": "8658:26:28",
                                  "nodeType": "YulAssignment",
                                  "src": "8658:26:28",
                                  "value": {
                                    "arguments": [
                                      {
                                        "name": "low",
                                        "nativeSrc": "8669:3:28",
                                        "nodeType": "YulIdentifier",
                                        "src": "8669:3:28"
                                      },
                                      {
                                        "name": "remainder",
                                        "nativeSrc": "8674:9:28",
                                        "nodeType": "YulIdentifier",
                                        "src": "8674:9:28"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nativeSrc": "8665:3:28",
                                      "nodeType": "YulIdentifier",
                                      "src": "8665:3:28"
                                    },
                                    "nativeSrc": "8665:19:28",
                                    "nodeType": "YulFunctionCall",
                                    "src": "8665:19:28"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "low",
                                      "nativeSrc": "8658:3:28",
                                      "nodeType": "YulIdentifier",
                                      "src": "8658:3:28"
                                    }
                                  ]
                                }
                              ]
                            },
                            "evmVersion": "paris",
                            "externalReferences": [
                              {
                                "declaration": 6791,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "8510:11:28",
                                "valueSize": 1
                              },
                              {
                                "declaration": 6797,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "8604:4:28",
                                "valueSize": 1
                              },
                              {
                                "declaration": 6797,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "8616:4:28",
                                "valueSize": 1
                              },
                              {
                                "declaration": 6799,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "8636:3:28",
                                "valueSize": 1
                              },
                              {
                                "declaration": 6799,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "8658:3:28",
                                "valueSize": 1
                              },
                              {
                                "declaration": 6799,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "8669:3:28",
                                "valueSize": 1
                              },
                              {
                                "declaration": 6834,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "8484:9:28",
                                "valueSize": 1
                              },
                              {
                                "declaration": 6834,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "8625:9:28",
                                "valueSize": 1
                              },
                              {
                                "declaration": 6834,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "8674:9:28",
                                "valueSize": 1
                              },
                              {
                                "declaration": 6787,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "8504:1:28",
                                "valueSize": 1
                              },
                              {
                                "declaration": 6789,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "8507:1:28",
                                "valueSize": 1
                              }
                            ],
                            "flags": [
                              "memory-safe"
                            ],
                            "id": 6836,
                            "nodeType": "InlineAssembly",
                            "src": "8390:308:28"
                          },
                          {
                            "assignments": [
                              6838
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 6838,
                                "mutability": "mutable",
                                "name": "twos",
                                "nameLocation": "8910:4:28",
                                "nodeType": "VariableDeclaration",
                                "scope": 6918,
                                "src": "8902:12:28",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 6837,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "8902:7:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 6845,
                            "initialValue": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 6844,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 6839,
                                "name": "denominator",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6791,
                                "src": "8917:11:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "&",
                              "rightExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 6842,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "hexValue": "30",
                                      "id": 6840,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "8932:1:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "-",
                                    "rightExpression": {
                                      "id": 6841,
                                      "name": "denominator",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6791,
                                      "src": "8936:11:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "8932:15:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 6843,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "8931:17:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "8917:31:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "8902:46:28"
                          },
                          {
                            "AST": {
                              "nativeSrc": "8987:359:28",
                              "nodeType": "YulBlock",
                              "src": "8987:359:28",
                              "statements": [
                                {
                                  "nativeSrc": "9052:37:28",
                                  "nodeType": "YulAssignment",
                                  "src": "9052:37:28",
                                  "value": {
                                    "arguments": [
                                      {
                                        "name": "denominator",
                                        "nativeSrc": "9071:11:28",
                                        "nodeType": "YulIdentifier",
                                        "src": "9071:11:28"
                                      },
                                      {
                                        "name": "twos",
                                        "nativeSrc": "9084:4:28",
                                        "nodeType": "YulIdentifier",
                                        "src": "9084:4:28"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "div",
                                      "nativeSrc": "9067:3:28",
                                      "nodeType": "YulIdentifier",
                                      "src": "9067:3:28"
                                    },
                                    "nativeSrc": "9067:22:28",
                                    "nodeType": "YulFunctionCall",
                                    "src": "9067:22:28"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "denominator",
                                      "nativeSrc": "9052:11:28",
                                      "nodeType": "YulIdentifier",
                                      "src": "9052:11:28"
                                    }
                                  ]
                                },
                                {
                                  "nativeSrc": "9153:21:28",
                                  "nodeType": "YulAssignment",
                                  "src": "9153:21:28",
                                  "value": {
                                    "arguments": [
                                      {
                                        "name": "low",
                                        "nativeSrc": "9164:3:28",
                                        "nodeType": "YulIdentifier",
                                        "src": "9164:3:28"
                                      },
                                      {
                                        "name": "twos",
                                        "nativeSrc": "9169:4:28",
                                        "nodeType": "YulIdentifier",
                                        "src": "9169:4:28"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "div",
                                      "nativeSrc": "9160:3:28",
                                      "nodeType": "YulIdentifier",
                                      "src": "9160:3:28"
                                    },
                                    "nativeSrc": "9160:14:28",
                                    "nodeType": "YulFunctionCall",
                                    "src": "9160:14:28"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "low",
                                      "nativeSrc": "9153:3:28",
                                      "nodeType": "YulIdentifier",
                                      "src": "9153:3:28"
                                    }
                                  ]
                                },
                                {
                                  "nativeSrc": "9293:39:28",
                                  "nodeType": "YulAssignment",
                                  "src": "9293:39:28",
                                  "value": {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "kind": "number",
                                                "nativeSrc": "9313:1:28",
                                                "nodeType": "YulLiteral",
                                                "src": "9313:1:28",
                                                "type": "",
                                                "value": "0"
                                              },
                                              {
                                                "name": "twos",
                                                "nativeSrc": "9316:4:28",
                                                "nodeType": "YulIdentifier",
                                                "src": "9316:4:28"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nativeSrc": "9309:3:28",
                                              "nodeType": "YulIdentifier",
                                              "src": "9309:3:28"
                                            },
                                            "nativeSrc": "9309:12:28",
                                            "nodeType": "YulFunctionCall",
                                            "src": "9309:12:28"
                                          },
                                          {
                                            "name": "twos",
                                            "nativeSrc": "9323:4:28",
                                            "nodeType": "YulIdentifier",
                                            "src": "9323:4:28"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "div",
                                          "nativeSrc": "9305:3:28",
                                          "nodeType": "YulIdentifier",
                                          "src": "9305:3:28"
                                        },
                                        "nativeSrc": "9305:23:28",
                                        "nodeType": "YulFunctionCall",
                                        "src": "9305:23:28"
                                      },
                                      {
                                        "kind": "number",
                                        "nativeSrc": "9330:1:28",
                                        "nodeType": "YulLiteral",
                                        "src": "9330:1:28",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nativeSrc": "9301:3:28",
                                      "nodeType": "YulIdentifier",
                                      "src": "9301:3:28"
                                    },
                                    "nativeSrc": "9301:31:28",
                                    "nodeType": "YulFunctionCall",
                                    "src": "9301:31:28"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "twos",
                                      "nativeSrc": "9293:4:28",
                                      "nodeType": "YulIdentifier",
                                      "src": "9293:4:28"
                                    }
                                  ]
                                }
                              ]
                            },
                            "evmVersion": "paris",
                            "externalReferences": [
                              {
                                "declaration": 6791,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "9052:11:28",
                                "valueSize": 1
                              },
                              {
                                "declaration": 6791,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "9071:11:28",
                                "valueSize": 1
                              },
                              {
                                "declaration": 6799,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "9153:3:28",
                                "valueSize": 1
                              },
                              {
                                "declaration": 6799,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "9164:3:28",
                                "valueSize": 1
                              },
                              {
                                "declaration": 6838,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "9084:4:28",
                                "valueSize": 1
                              },
                              {
                                "declaration": 6838,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "9169:4:28",
                                "valueSize": 1
                              },
                              {
                                "declaration": 6838,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "9293:4:28",
                                "valueSize": 1
                              },
                              {
                                "declaration": 6838,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "9316:4:28",
                                "valueSize": 1
                              },
                              {
                                "declaration": 6838,
                                "isOffset": false,
                                "isSlot": false,
                                "src": "9323:4:28",
                                "valueSize": 1
                              }
                            ],
                            "flags": [
                              "memory-safe"
                            ],
                            "id": 6846,
                            "nodeType": "InlineAssembly",
                            "src": "8962:384:28"
                          },
                          {
                            "expression": {
                              "id": 6851,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 6847,
                                "name": "low",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6799,
                                "src": "9409:3:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "|=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 6850,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 6848,
                                  "name": "high",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6797,
                                  "src": "9416:4:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "*",
                                "rightExpression": {
                                  "id": 6849,
                                  "name": "twos",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6838,
                                  "src": "9423:4:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "9416:11:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "9409:18:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 6852,
                            "nodeType": "ExpressionStatement",
                            "src": "9409:18:28"
                          },
                          {
                            "assignments": [
                              6854
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 6854,
                                "mutability": "mutable",
                                "name": "inverse",
                                "nameLocation": "9770:7:28",
                                "nodeType": "VariableDeclaration",
                                "scope": 6918,
                                "src": "9762:15:28",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 6853,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "9762:7:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 6861,
                            "initialValue": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 6860,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 6857,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "hexValue": "33",
                                      "id": 6855,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "9781:1:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_3_by_1",
                                        "typeString": "int_const 3"
                                      },
                                      "value": "3"
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "*",
                                    "rightExpression": {
                                      "id": 6856,
                                      "name": "denominator",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6791,
                                      "src": "9785:11:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "9781:15:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 6858,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "9780:17:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "^",
                              "rightExpression": {
                                "hexValue": "32",
                                "id": 6859,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "9800:1:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_2_by_1",
                                  "typeString": "int_const 2"
                                },
                                "value": "2"
                              },
                              "src": "9780:21:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "9762:39:28"
                          },
                          {
                            "expression": {
                              "id": 6868,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 6862,
                                "name": "inverse",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6854,
                                "src": "10018:7:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "*=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 6867,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "32",
                                  "id": 6863,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "10029:1:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_2_by_1",
                                    "typeString": "int_const 2"
                                  },
                                  "value": "2"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 6866,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 6864,
                                    "name": "denominator",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6791,
                                    "src": "10033:11:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "*",
                                  "rightExpression": {
                                    "id": 6865,
                                    "name": "inverse",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6854,
                                    "src": "10047:7:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "10033:21:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "10029:25:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "10018:36:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 6869,
                            "nodeType": "ExpressionStatement",
                            "src": "10018:36:28"
                          },
                          {
                            "expression": {
                              "id": 6876,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 6870,
                                "name": "inverse",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6854,
                                "src": "10088:7:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "*=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 6875,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "32",
                                  "id": 6871,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "10099:1:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_2_by_1",
                                    "typeString": "int_const 2"
                                  },
                                  "value": "2"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 6874,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 6872,
                                    "name": "denominator",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6791,
                                    "src": "10103:11:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "*",
                                  "rightExpression": {
                                    "id": 6873,
                                    "name": "inverse",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6854,
                                    "src": "10117:7:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "10103:21:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "10099:25:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "10088:36:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 6877,
                            "nodeType": "ExpressionStatement",
                            "src": "10088:36:28"
                          },
                          {
                            "expression": {
                              "id": 6884,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 6878,
                                "name": "inverse",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6854,
                                "src": "10160:7:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "*=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 6883,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "32",
                                  "id": 6879,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "10171:1:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_2_by_1",
                                    "typeString": "int_const 2"
                                  },
                                  "value": "2"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 6882,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 6880,
                                    "name": "denominator",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6791,
                                    "src": "10175:11:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "*",
                                  "rightExpression": {
                                    "id": 6881,
                                    "name": "inverse",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6854,
                                    "src": "10189:7:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "10175:21:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "10171:25:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "10160:36:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 6885,
                            "nodeType": "ExpressionStatement",
                            "src": "10160:36:28"
                          },
                          {
                            "expression": {
                              "id": 6892,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 6886,
                                "name": "inverse",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6854,
                                "src": "10231:7:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "*=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 6891,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "32",
                                  "id": 6887,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "10242:1:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_2_by_1",
                                    "typeString": "int_const 2"
                                  },
                                  "value": "2"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 6890,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 6888,
                                    "name": "denominator",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6791,
                                    "src": "10246:11:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "*",
                                  "rightExpression": {
                                    "id": 6889,
                                    "name": "inverse",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6854,
                                    "src": "10260:7:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "10246:21:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "10242:25:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "10231:36:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 6893,
                            "nodeType": "ExpressionStatement",
                            "src": "10231:36:28"
                          },
                          {
                            "expression": {
                              "id": 6900,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 6894,
                                "name": "inverse",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6854,
                                "src": "10304:7:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "*=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 6899,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "32",
                                  "id": 6895,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "10315:1:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_2_by_1",
                                    "typeString": "int_const 2"
                                  },
                                  "value": "2"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 6898,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 6896,
                                    "name": "denominator",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6791,
                                    "src": "10319:11:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "*",
                                  "rightExpression": {
                                    "id": 6897,
                                    "name": "inverse",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6854,
                                    "src": "10333:7:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "10319:21:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "10315:25:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "10304:36:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 6901,
                            "nodeType": "ExpressionStatement",
                            "src": "10304:36:28"
                          },
                          {
                            "expression": {
                              "id": 6908,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 6902,
                                "name": "inverse",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6854,
                                "src": "10378:7:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "*=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 6907,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "32",
                                  "id": 6903,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "10389:1:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_2_by_1",
                                    "typeString": "int_const 2"
                                  },
                                  "value": "2"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 6906,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 6904,
                                    "name": "denominator",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6791,
                                    "src": "10393:11:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "*",
                                  "rightExpression": {
                                    "id": 6905,
                                    "name": "inverse",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6854,
                                    "src": "10407:7:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "10393:21:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "10389:25:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "10378:36:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 6909,
                            "nodeType": "ExpressionStatement",
                            "src": "10378:36:28"
                          },
                          {
                            "expression": {
                              "id": 6914,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 6910,
                                "name": "result",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6794,
                                "src": "10859:6:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 6913,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 6911,
                                  "name": "low",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6799,
                                  "src": "10868:3:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "*",
                                "rightExpression": {
                                  "id": 6912,
                                  "name": "inverse",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6854,
                                  "src": "10874:7:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "10868:13:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "10859:22:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 6915,
                            "nodeType": "ExpressionStatement",
                            "src": "10859:22:28"
                          },
                          {
                            "expression": {
                              "id": 6916,
                              "name": "result",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6794,
                              "src": "10902:6:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "functionReturnParameters": 6795,
                            "id": 6917,
                            "nodeType": "Return",
                            "src": "10895:13:28"
                          }
                        ]
                      }
                    ]
                  },
                  "documentation": {
                    "id": 6785,
                    "nodeType": "StructuredDocumentation",
                    "src": "6925:312:28",
                    "text": " @dev Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or\n denominator == 0.\n Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) with further edits by\n Uniswap Labs also under MIT license."
                  },
                  "id": 6920,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "mulDiv",
                  "nameLocation": "7251:6:28",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 6792,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6787,
                        "mutability": "mutable",
                        "name": "x",
                        "nameLocation": "7266:1:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 6920,
                        "src": "7258:9:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6786,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7258:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6789,
                        "mutability": "mutable",
                        "name": "y",
                        "nameLocation": "7277:1:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 6920,
                        "src": "7269:9:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6788,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7269:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6791,
                        "mutability": "mutable",
                        "name": "denominator",
                        "nameLocation": "7288:11:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 6920,
                        "src": "7280:19:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6790,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7280:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7257:43:28"
                  },
                  "returnParameters": {
                    "id": 6795,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6794,
                        "mutability": "mutable",
                        "name": "result",
                        "nameLocation": "7332:6:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 6920,
                        "src": "7324:14:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6793,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7324:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7323:16:28"
                  },
                  "scope": 8014,
                  "src": "7242:3683:28",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 6956,
                    "nodeType": "Block",
                    "src": "11164:128:28",
                    "statements": [
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 6954,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [
                              {
                                "id": 6936,
                                "name": "x",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6923,
                                "src": "11188:1:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "id": 6937,
                                "name": "y",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6925,
                                "src": "11191:1:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "id": 6938,
                                "name": "denominator",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6927,
                                "src": "11194:11:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 6935,
                              "name": "mulDiv",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [
                                6920,
                                6957
                              ],
                              "referencedDeclaration": 6920,
                              "src": "11181:6:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 6939,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "11181:25:28",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "arguments": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "id": 6952,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "arguments": [
                                    {
                                      "id": 6943,
                                      "name": "rounding",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6930,
                                      "src": "11242:8:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_enum$_Rounding_$6405",
                                        "typeString": "enum Math.Rounding"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_enum$_Rounding_$6405",
                                        "typeString": "enum Math.Rounding"
                                      }
                                    ],
                                    "id": 6942,
                                    "name": "unsignedRoundsUp",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8013,
                                    "src": "11225:16:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_enum$_Rounding_$6405_$returns$_t_bool_$",
                                      "typeString": "function (enum Math.Rounding) pure returns (bool)"
                                    }
                                  },
                                  "id": 6944,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "11225:26:28",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "&&",
                                "rightExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 6951,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "arguments": [
                                      {
                                        "id": 6946,
                                        "name": "x",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6923,
                                        "src": "11262:1:28",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      {
                                        "id": 6947,
                                        "name": "y",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6925,
                                        "src": "11265:1:28",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      {
                                        "id": 6948,
                                        "name": "denominator",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 6927,
                                        "src": "11268:11:28",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "id": 6945,
                                      "name": "mulmod",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -16,
                                      "src": "11255:6:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                        "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                                      }
                                    },
                                    "id": 6949,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "11255:25:28",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": ">",
                                  "rightExpression": {
                                    "hexValue": "30",
                                    "id": 6950,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "11283:1:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  },
                                  "src": "11255:29:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "src": "11225:59:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "expression": {
                                "id": 6940,
                                "name": "SafeCast",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9779,
                                "src": "11209:8:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_SafeCast_$9779_$",
                                  "typeString": "type(library SafeCast)"
                                }
                              },
                              "id": 6941,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "11218:6:28",
                              "memberName": "toUint",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 9778,
                              "src": "11209:15:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bool_$returns$_t_uint256_$",
                                "typeString": "function (bool) pure returns (uint256)"
                              }
                            },
                            "id": 6953,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "11209:76:28",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "11181:104:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 6934,
                        "id": 6955,
                        "nodeType": "Return",
                        "src": "11174:111:28"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 6921,
                    "nodeType": "StructuredDocumentation",
                    "src": "10931:118:28",
                    "text": " @dev Calculates x * y / denominator with full precision, following the selected rounding direction."
                  },
                  "id": 6957,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "mulDiv",
                  "nameLocation": "11063:6:28",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 6931,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6923,
                        "mutability": "mutable",
                        "name": "x",
                        "nameLocation": "11078:1:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 6957,
                        "src": "11070:9:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6922,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11070:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6925,
                        "mutability": "mutable",
                        "name": "y",
                        "nameLocation": "11089:1:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 6957,
                        "src": "11081:9:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6924,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11081:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6927,
                        "mutability": "mutable",
                        "name": "denominator",
                        "nameLocation": "11100:11:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 6957,
                        "src": "11092:19:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6926,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11092:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6930,
                        "mutability": "mutable",
                        "name": "rounding",
                        "nameLocation": "11122:8:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 6957,
                        "src": "11113:17:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Rounding_$6405",
                          "typeString": "enum Math.Rounding"
                        },
                        "typeName": {
                          "id": 6929,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 6928,
                            "name": "Rounding",
                            "nameLocations": [
                              "11113:8:28"
                            ],
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 6405,
                            "src": "11113:8:28"
                          },
                          "referencedDeclaration": 6405,
                          "src": "11113:8:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Rounding_$6405",
                            "typeString": "enum Math.Rounding"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "11069:62:28"
                  },
                  "returnParameters": {
                    "id": 6934,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6933,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 6957,
                        "src": "11155:7:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6932,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11155:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "11154:9:28"
                  },
                  "scope": 8014,
                  "src": "11054:238:28",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7006,
                    "nodeType": "Block",
                    "src": "11500:245:28",
                    "statements": [
                      {
                        "id": 7005,
                        "nodeType": "UncheckedBlock",
                        "src": "11510:229:28",
                        "statements": [
                          {
                            "assignments": [
                              6970,
                              6972
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 6970,
                                "mutability": "mutable",
                                "name": "high",
                                "nameLocation": "11543:4:28",
                                "nodeType": "VariableDeclaration",
                                "scope": 7005,
                                "src": "11535:12:28",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 6969,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "11535:7:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              },
                              {
                                "constant": false,
                                "id": 6972,
                                "mutability": "mutable",
                                "name": "low",
                                "nameLocation": "11557:3:28",
                                "nodeType": "VariableDeclaration",
                                "scope": 7005,
                                "src": "11549:11:28",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 6971,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "11549:7:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 6977,
                            "initialValue": {
                              "arguments": [
                                {
                                  "id": 6974,
                                  "name": "x",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6960,
                                  "src": "11571:1:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "id": 6975,
                                  "name": "y",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6962,
                                  "src": "11574:1:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 6973,
                                "name": "mul512",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6433,
                                "src": "11564:6:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$",
                                  "typeString": "function (uint256,uint256) pure returns (uint256,uint256)"
                                }
                              },
                              "id": 6976,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "11564:12:28",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                                "typeString": "tuple(uint256,uint256)"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "11534:42:28"
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 6982,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 6978,
                                "name": "high",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6970,
                                "src": "11594:4:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 6981,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "31",
                                  "id": 6979,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "11602:1:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<<",
                                "rightExpression": {
                                  "id": 6980,
                                  "name": "n",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6964,
                                  "src": "11607:1:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                "src": "11602:6:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "11594:14:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 6991,
                            "nodeType": "IfStatement",
                            "src": "11590:86:28",
                            "trueBody": {
                              "id": 6990,
                              "nodeType": "Block",
                              "src": "11610:66:28",
                              "statements": [
                                {
                                  "expression": {
                                    "arguments": [
                                      {
                                        "expression": {
                                          "id": 6986,
                                          "name": "Panic",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 4725,
                                          "src": "11640:5:28",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_contract$_Panic_$4725_$",
                                            "typeString": "type(library Panic)"
                                          }
                                        },
                                        "id": 6987,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "memberLocation": "11646:14:28",
                                        "memberName": "UNDER_OVERFLOW",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 4688,
                                        "src": "11640:20:28",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "expression": {
                                        "id": 6983,
                                        "name": "Panic",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4725,
                                        "src": "11628:5:28",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_contract$_Panic_$4725_$",
                                          "typeString": "type(library Panic)"
                                        }
                                      },
                                      "id": 6985,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberLocation": "11634:5:28",
                                      "memberName": "panic",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 4724,
                                      "src": "11628:11:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$__$",
                                        "typeString": "function (uint256) pure"
                                      }
                                    },
                                    "id": 6988,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "11628:33:28",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_tuple$__$",
                                      "typeString": "tuple()"
                                    }
                                  },
                                  "id": 6989,
                                  "nodeType": "ExpressionStatement",
                                  "src": "11628:33:28"
                                }
                              ]
                            }
                          },
                          {
                            "expression": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 7003,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 6997,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 6992,
                                      "name": "high",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6970,
                                      "src": "11697:4:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "<<",
                                    "rightExpression": {
                                      "components": [
                                        {
                                          "commonType": {
                                            "typeIdentifier": "t_uint16",
                                            "typeString": "uint16"
                                          },
                                          "id": 6995,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "hexValue": "323536",
                                            "id": 6993,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "11706:3:28",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_256_by_1",
                                              "typeString": "int_const 256"
                                            },
                                            "value": "256"
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "-",
                                          "rightExpression": {
                                            "id": 6994,
                                            "name": "n",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6964,
                                            "src": "11712:1:28",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint8",
                                              "typeString": "uint8"
                                            }
                                          },
                                          "src": "11706:7:28",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint16",
                                            "typeString": "uint16"
                                          }
                                        }
                                      ],
                                      "id": 6996,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "TupleExpression",
                                      "src": "11705:9:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint16",
                                        "typeString": "uint16"
                                      }
                                    },
                                    "src": "11697:17:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 6998,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "11696:19:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "|",
                              "rightExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 7001,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 6999,
                                      "name": "low",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6972,
                                      "src": "11719:3:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": ">>",
                                    "rightExpression": {
                                      "id": 7000,
                                      "name": "n",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 6964,
                                      "src": "11726:1:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint8",
                                        "typeString": "uint8"
                                      }
                                    },
                                    "src": "11719:8:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 7002,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "11718:10:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "11696:32:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "functionReturnParameters": 6968,
                            "id": 7004,
                            "nodeType": "Return",
                            "src": "11689:39:28"
                          }
                        ]
                      }
                    ]
                  },
                  "documentation": {
                    "id": 6958,
                    "nodeType": "StructuredDocumentation",
                    "src": "11298:111:28",
                    "text": " @dev Calculates floor(x * y >> n) with full precision. Throws if result overflows a uint256."
                  },
                  "id": 7007,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "mulShr",
                  "nameLocation": "11423:6:28",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 6965,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6960,
                        "mutability": "mutable",
                        "name": "x",
                        "nameLocation": "11438:1:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 7007,
                        "src": "11430:9:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6959,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11430:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6962,
                        "mutability": "mutable",
                        "name": "y",
                        "nameLocation": "11449:1:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 7007,
                        "src": "11441:9:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6961,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11441:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 6964,
                        "mutability": "mutable",
                        "name": "n",
                        "nameLocation": "11458:1:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 7007,
                        "src": "11452:7:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 6963,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "11452:5:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "11429:31:28"
                  },
                  "returnParameters": {
                    "id": 6968,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6967,
                        "mutability": "mutable",
                        "name": "result",
                        "nameLocation": "11492:6:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 7007,
                        "src": "11484:14:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 6966,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11484:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "11483:16:28"
                  },
                  "scope": 8014,
                  "src": "11414:331:28",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7045,
                    "nodeType": "Block",
                    "src": "11963:113:28",
                    "statements": [
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 7043,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [
                              {
                                "id": 7023,
                                "name": "x",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7010,
                                "src": "11987:1:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "id": 7024,
                                "name": "y",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7012,
                                "src": "11990:1:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "id": 7025,
                                "name": "n",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7014,
                                "src": "11993:1:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              ],
                              "id": 7022,
                              "name": "mulShr",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [
                                7007,
                                7046
                              ],
                              "referencedDeclaration": 7007,
                              "src": "11980:6:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint8_$returns$_t_uint256_$",
                                "typeString": "function (uint256,uint256,uint8) pure returns (uint256)"
                              }
                            },
                            "id": 7026,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "11980:15:28",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "arguments": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "id": 7041,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "arguments": [
                                    {
                                      "id": 7030,
                                      "name": "rounding",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7017,
                                      "src": "12031:8:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_enum$_Rounding_$6405",
                                        "typeString": "enum Math.Rounding"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_enum$_Rounding_$6405",
                                        "typeString": "enum Math.Rounding"
                                      }
                                    ],
                                    "id": 7029,
                                    "name": "unsignedRoundsUp",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8013,
                                    "src": "12014:16:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_enum$_Rounding_$6405_$returns$_t_bool_$",
                                      "typeString": "function (enum Math.Rounding) pure returns (bool)"
                                    }
                                  },
                                  "id": 7031,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "12014:26:28",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "&&",
                                "rightExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 7040,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "arguments": [
                                      {
                                        "id": 7033,
                                        "name": "x",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7010,
                                        "src": "12051:1:28",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      {
                                        "id": 7034,
                                        "name": "y",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7012,
                                        "src": "12054:1:28",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 7037,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "hexValue": "31",
                                          "id": 7035,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "12057:1:28",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_1_by_1",
                                            "typeString": "int_const 1"
                                          },
                                          "value": "1"
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "<<",
                                        "rightExpression": {
                                          "id": 7036,
                                          "name": "n",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7014,
                                          "src": "12062:1:28",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint8",
                                            "typeString": "uint8"
                                          }
                                        },
                                        "src": "12057:6:28",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "id": 7032,
                                      "name": "mulmod",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -16,
                                      "src": "12044:6:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                        "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                                      }
                                    },
                                    "id": 7038,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "12044:20:28",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": ">",
                                  "rightExpression": {
                                    "hexValue": "30",
                                    "id": 7039,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "12067:1:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  },
                                  "src": "12044:24:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "src": "12014:54:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "expression": {
                                "id": 7027,
                                "name": "SafeCast",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9779,
                                "src": "11998:8:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_SafeCast_$9779_$",
                                  "typeString": "type(library SafeCast)"
                                }
                              },
                              "id": 7028,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "12007:6:28",
                              "memberName": "toUint",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 9778,
                              "src": "11998:15:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bool_$returns$_t_uint256_$",
                                "typeString": "function (bool) pure returns (uint256)"
                              }
                            },
                            "id": 7042,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "11998:71:28",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "11980:89:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 7021,
                        "id": 7044,
                        "nodeType": "Return",
                        "src": "11973:96:28"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7008,
                    "nodeType": "StructuredDocumentation",
                    "src": "11751:109:28",
                    "text": " @dev Calculates x * y >> n with full precision, following the selected rounding direction."
                  },
                  "id": 7046,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "mulShr",
                  "nameLocation": "11874:6:28",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 7018,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7010,
                        "mutability": "mutable",
                        "name": "x",
                        "nameLocation": "11889:1:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 7046,
                        "src": "11881:9:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7009,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11881:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7012,
                        "mutability": "mutable",
                        "name": "y",
                        "nameLocation": "11900:1:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 7046,
                        "src": "11892:9:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7011,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11892:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7014,
                        "mutability": "mutable",
                        "name": "n",
                        "nameLocation": "11909:1:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 7046,
                        "src": "11903:7:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 7013,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "11903:5:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7017,
                        "mutability": "mutable",
                        "name": "rounding",
                        "nameLocation": "11921:8:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 7046,
                        "src": "11912:17:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Rounding_$6405",
                          "typeString": "enum Math.Rounding"
                        },
                        "typeName": {
                          "id": 7016,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 7015,
                            "name": "Rounding",
                            "nameLocations": [
                              "11912:8:28"
                            ],
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 6405,
                            "src": "11912:8:28"
                          },
                          "referencedDeclaration": 6405,
                          "src": "11912:8:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Rounding_$6405",
                            "typeString": "enum Math.Rounding"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "11880:50:28"
                  },
                  "returnParameters": {
                    "id": 7021,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7020,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 7046,
                        "src": "11954:7:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7019,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11954:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "11953:9:28"
                  },
                  "scope": 8014,
                  "src": "11865:211:28",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7142,
                    "nodeType": "Block",
                    "src": "12710:1849:28",
                    "statements": [
                      {
                        "id": 7141,
                        "nodeType": "UncheckedBlock",
                        "src": "12720:1833:28",
                        "statements": [
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 7058,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 7056,
                                "name": "n",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7051,
                                "src": "12748:1:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 7057,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "12753:1:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "12748:6:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 7061,
                            "nodeType": "IfStatement",
                            "src": "12744:20:28",
                            "trueBody": {
                              "expression": {
                                "hexValue": "30",
                                "id": 7059,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "12763:1:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "functionReturnParameters": 7055,
                              "id": 7060,
                              "nodeType": "Return",
                              "src": "12756:8:28"
                            }
                          },
                          {
                            "assignments": [
                              7063
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 7063,
                                "mutability": "mutable",
                                "name": "remainder",
                                "nameLocation": "13243:9:28",
                                "nodeType": "VariableDeclaration",
                                "scope": 7141,
                                "src": "13235:17:28",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 7062,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "13235:7:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 7067,
                            "initialValue": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 7066,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 7064,
                                "name": "a",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7049,
                                "src": "13255:1:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "%",
                              "rightExpression": {
                                "id": 7065,
                                "name": "n",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7051,
                                "src": "13259:1:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "13255:5:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "13235:25:28"
                          },
                          {
                            "assignments": [
                              7069
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 7069,
                                "mutability": "mutable",
                                "name": "gcd",
                                "nameLocation": "13282:3:28",
                                "nodeType": "VariableDeclaration",
                                "scope": 7141,
                                "src": "13274:11:28",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 7068,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "13274:7:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 7071,
                            "initialValue": {
                              "id": 7070,
                              "name": "n",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7051,
                              "src": "13288:1:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "13274:15:28"
                          },
                          {
                            "assignments": [
                              7073
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 7073,
                                "mutability": "mutable",
                                "name": "x",
                                "nameLocation": "13432:1:28",
                                "nodeType": "VariableDeclaration",
                                "scope": 7141,
                                "src": "13425:8:28",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                },
                                "typeName": {
                                  "id": 7072,
                                  "name": "int256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "13425:6:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 7075,
                            "initialValue": {
                              "hexValue": "30",
                              "id": 7074,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "13436:1:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "13425:12:28"
                          },
                          {
                            "assignments": [
                              7077
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 7077,
                                "mutability": "mutable",
                                "name": "y",
                                "nameLocation": "13458:1:28",
                                "nodeType": "VariableDeclaration",
                                "scope": 7141,
                                "src": "13451:8:28",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                },
                                "typeName": {
                                  "id": 7076,
                                  "name": "int256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "13451:6:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 7079,
                            "initialValue": {
                              "hexValue": "31",
                              "id": 7078,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "13462:1:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "13451:12:28"
                          },
                          {
                            "body": {
                              "id": 7116,
                              "nodeType": "Block",
                              "src": "13501:882:28",
                              "statements": [
                                {
                                  "assignments": [
                                    7084
                                  ],
                                  "declarations": [
                                    {
                                      "constant": false,
                                      "id": 7084,
                                      "mutability": "mutable",
                                      "name": "quotient",
                                      "nameLocation": "13527:8:28",
                                      "nodeType": "VariableDeclaration",
                                      "scope": 7116,
                                      "src": "13519:16:28",
                                      "stateVariable": false,
                                      "storageLocation": "default",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "typeName": {
                                        "id": 7083,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "13519:7:28",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "visibility": "internal"
                                    }
                                  ],
                                  "id": 7088,
                                  "initialValue": {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 7087,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 7085,
                                      "name": "gcd",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7069,
                                      "src": "13538:3:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "/",
                                    "rightExpression": {
                                      "id": 7086,
                                      "name": "remainder",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7063,
                                      "src": "13544:9:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "13538:15:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "VariableDeclarationStatement",
                                  "src": "13519:34:28"
                                },
                                {
                                  "expression": {
                                    "id": 7099,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "components": [
                                        {
                                          "id": 7089,
                                          "name": "gcd",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7069,
                                          "src": "13573:3:28",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        {
                                          "id": 7090,
                                          "name": "remainder",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7063,
                                          "src": "13578:9:28",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "id": 7091,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": true,
                                      "nodeType": "TupleExpression",
                                      "src": "13572:16:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                                        "typeString": "tuple(uint256,uint256)"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "=",
                                    "rightHandSide": {
                                      "components": [
                                        {
                                          "id": 7092,
                                          "name": "remainder",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7063,
                                          "src": "13678:9:28",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        {
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 7097,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "id": 7093,
                                            "name": "gcd",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 7069,
                                            "src": "13923:3:28",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "-",
                                          "rightExpression": {
                                            "commonType": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            },
                                            "id": 7096,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                              "id": 7094,
                                              "name": "remainder",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 7063,
                                              "src": "13929:9:28",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "*",
                                            "rightExpression": {
                                              "id": 7095,
                                              "name": "quotient",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 7084,
                                              "src": "13941:8:28",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "src": "13929:20:28",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "src": "13923:26:28",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "id": 7098,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "TupleExpression",
                                      "src": "13591:376:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                                        "typeString": "tuple(uint256,uint256)"
                                      }
                                    },
                                    "src": "13572:395:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_tuple$__$",
                                      "typeString": "tuple()"
                                    }
                                  },
                                  "id": 7100,
                                  "nodeType": "ExpressionStatement",
                                  "src": "13572:395:28"
                                },
                                {
                                  "expression": {
                                    "id": 7114,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "components": [
                                        {
                                          "id": 7101,
                                          "name": "x",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7073,
                                          "src": "13987:1:28",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_int256",
                                            "typeString": "int256"
                                          }
                                        },
                                        {
                                          "id": 7102,
                                          "name": "y",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7077,
                                          "src": "13990:1:28",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_int256",
                                            "typeString": "int256"
                                          }
                                        }
                                      ],
                                      "id": 7103,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": true,
                                      "nodeType": "TupleExpression",
                                      "src": "13986:6:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_tuple$_t_int256_$_t_int256_$",
                                        "typeString": "tuple(int256,int256)"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "=",
                                    "rightHandSide": {
                                      "components": [
                                        {
                                          "id": 7104,
                                          "name": "y",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7077,
                                          "src": "14072:1:28",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_int256",
                                            "typeString": "int256"
                                          }
                                        },
                                        {
                                          "commonType": {
                                            "typeIdentifier": "t_int256",
                                            "typeString": "int256"
                                          },
                                          "id": 7112,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "id": 7105,
                                            "name": "x",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 7073,
                                            "src": "14326:1:28",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_int256",
                                              "typeString": "int256"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "-",
                                          "rightExpression": {
                                            "commonType": {
                                              "typeIdentifier": "t_int256",
                                              "typeString": "int256"
                                            },
                                            "id": 7111,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                              "id": 7106,
                                              "name": "y",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 7077,
                                              "src": "14330:1:28",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_int256",
                                                "typeString": "int256"
                                              }
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "*",
                                            "rightExpression": {
                                              "arguments": [
                                                {
                                                  "id": 7109,
                                                  "name": "quotient",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 7084,
                                                  "src": "14341:8:28",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  }
                                                }
                                              ],
                                              "expression": {
                                                "argumentTypes": [
                                                  {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  }
                                                ],
                                                "id": 7108,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "lValueRequested": false,
                                                "nodeType": "ElementaryTypeNameExpression",
                                                "src": "14334:6:28",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_type$_t_int256_$",
                                                  "typeString": "type(int256)"
                                                },
                                                "typeName": {
                                                  "id": 7107,
                                                  "name": "int256",
                                                  "nodeType": "ElementaryTypeName",
                                                  "src": "14334:6:28",
                                                  "typeDescriptions": {}
                                                }
                                              },
                                              "id": 7110,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "kind": "typeConversion",
                                              "lValueRequested": false,
                                              "nameLocations": [],
                                              "names": [],
                                              "nodeType": "FunctionCall",
                                              "src": "14334:16:28",
                                              "tryCall": false,
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_int256",
                                                "typeString": "int256"
                                              }
                                            },
                                            "src": "14330:20:28",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_int256",
                                              "typeString": "int256"
                                            }
                                          },
                                          "src": "14326:24:28",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_int256",
                                            "typeString": "int256"
                                          }
                                        }
                                      ],
                                      "id": 7113,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "TupleExpression",
                                      "src": "13995:373:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_tuple$_t_int256_$_t_int256_$",
                                        "typeString": "tuple(int256,int256)"
                                      }
                                    },
                                    "src": "13986:382:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_tuple$__$",
                                      "typeString": "tuple()"
                                    }
                                  },
                                  "id": 7115,
                                  "nodeType": "ExpressionStatement",
                                  "src": "13986:382:28"
                                }
                              ]
                            },
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 7082,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 7080,
                                "name": "remainder",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7063,
                                "src": "13485:9:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 7081,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "13498:1:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "13485:14:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 7117,
                            "nodeType": "WhileStatement",
                            "src": "13478:905:28"
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 7120,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 7118,
                                "name": "gcd",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7069,
                                "src": "14401:3:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "hexValue": "31",
                                "id": 7119,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "14408:1:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "src": "14401:8:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 7123,
                            "nodeType": "IfStatement",
                            "src": "14397:22:28",
                            "trueBody": {
                              "expression": {
                                "hexValue": "30",
                                "id": 7121,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "14418:1:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "functionReturnParameters": 7055,
                              "id": 7122,
                              "nodeType": "Return",
                              "src": "14411:8:28"
                            }
                          },
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  },
                                  "id": 7127,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 7125,
                                    "name": "x",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7073,
                                    "src": "14470:1:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "<",
                                  "rightExpression": {
                                    "hexValue": "30",
                                    "id": 7126,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "14474:1:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  },
                                  "src": "14470:5:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 7134,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 7128,
                                    "name": "n",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7051,
                                    "src": "14477:1:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "-",
                                  "rightExpression": {
                                    "arguments": [
                                      {
                                        "id": 7132,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "UnaryOperation",
                                        "operator": "-",
                                        "prefix": true,
                                        "src": "14489:2:28",
                                        "subExpression": {
                                          "id": 7131,
                                          "name": "x",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7073,
                                          "src": "14490:1:28",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_int256",
                                            "typeString": "int256"
                                          }
                                        },
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      ],
                                      "id": 7130,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "14481:7:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_uint256_$",
                                        "typeString": "type(uint256)"
                                      },
                                      "typeName": {
                                        "id": 7129,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "14481:7:28",
                                        "typeDescriptions": {}
                                      }
                                    },
                                    "id": 7133,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "14481:11:28",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "14477:15:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "arguments": [
                                    {
                                      "id": 7137,
                                      "name": "x",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7073,
                                      "src": "14502:1:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      }
                                    ],
                                    "id": 7136,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "14494:7:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    },
                                    "typeName": {
                                      "id": 7135,
                                      "name": "uint256",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "14494:7:28",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 7138,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "14494:10:28",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 7124,
                                "name": "ternary",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 6682,
                                "src": "14462:7:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (bool,uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 7139,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "14462:43:28",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "functionReturnParameters": 7055,
                            "id": 7140,
                            "nodeType": "Return",
                            "src": "14455:50:28"
                          }
                        ]
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7047,
                    "nodeType": "StructuredDocumentation",
                    "src": "12082:553:28",
                    "text": " @dev Calculate the modular multiplicative inverse of a number in Z/nZ.\n If n is a prime, then Z/nZ is a field. In that case all elements are inversible, except 0.\n If n is not a prime, then Z/nZ is not a field, and some elements might not be inversible.\n If the input value is not inversible, 0 is returned.\n NOTE: If you know for sure that n is (big) a prime, it may be cheaper to use Fermat's little theorem and get the\n inverse using `Math.modExp(a, n - 2, n)`. See {invModPrime}."
                  },
                  "id": 7143,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "invMod",
                  "nameLocation": "12649:6:28",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 7052,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7049,
                        "mutability": "mutable",
                        "name": "a",
                        "nameLocation": "12664:1:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 7143,
                        "src": "12656:9:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7048,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "12656:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7051,
                        "mutability": "mutable",
                        "name": "n",
                        "nameLocation": "12675:1:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 7143,
                        "src": "12667:9:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7050,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "12667:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "12655:22:28"
                  },
                  "returnParameters": {
                    "id": 7055,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7054,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 7143,
                        "src": "12701:7:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7053,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "12701:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "12700:9:28"
                  },
                  "scope": 8014,
                  "src": "12640:1919:28",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7163,
                    "nodeType": "Block",
                    "src": "15159:82:28",
                    "statements": [
                      {
                        "id": 7162,
                        "nodeType": "UncheckedBlock",
                        "src": "15169:66:28",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 7155,
                                  "name": "a",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7146,
                                  "src": "15212:1:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 7158,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 7156,
                                    "name": "p",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7148,
                                    "src": "15215:1:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "-",
                                  "rightExpression": {
                                    "hexValue": "32",
                                    "id": 7157,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "15219:1:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_2_by_1",
                                      "typeString": "int_const 2"
                                    },
                                    "value": "2"
                                  },
                                  "src": "15215:5:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "id": 7159,
                                  "name": "p",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7148,
                                  "src": "15222:1:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "id": 7153,
                                  "name": "Math",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8014,
                                  "src": "15200:4:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_Math_$8014_$",
                                    "typeString": "type(library Math)"
                                  }
                                },
                                "id": 7154,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "15205:6:28",
                                "memberName": "modExp",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 7200,
                                "src": "15200:11:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (uint256,uint256,uint256) view returns (uint256)"
                                }
                              },
                              "id": 7160,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "15200:24:28",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "functionReturnParameters": 7152,
                            "id": 7161,
                            "nodeType": "Return",
                            "src": "15193:31:28"
                          }
                        ]
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7144,
                    "nodeType": "StructuredDocumentation",
                    "src": "14565:514:28",
                    "text": " @dev Variant of {invMod}. More efficient, but only works if `p` is known to be a prime greater than `2`.\n From https://en.wikipedia.org/wiki/Fermat%27s_little_theorem[Fermat's little theorem], we know that if p is\n prime, then `a**(p-1) ≡ 1 mod p`. As a consequence, we have `a * a**(p-2) ≡ 1 mod p`, which means that\n `a**(p-2)` is the modular multiplicative inverse of a in Fp.\n NOTE: this function does NOT check that `p` is a prime greater than `2`."
                  },
                  "id": 7164,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "invModPrime",
                  "nameLocation": "15093:11:28",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 7149,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7146,
                        "mutability": "mutable",
                        "name": "a",
                        "nameLocation": "15113:1:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 7164,
                        "src": "15105:9:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7145,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "15105:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7148,
                        "mutability": "mutable",
                        "name": "p",
                        "nameLocation": "15124:1:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 7164,
                        "src": "15116:9:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7147,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "15116:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "15104:22:28"
                  },
                  "returnParameters": {
                    "id": 7152,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7151,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 7164,
                        "src": "15150:7:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7150,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "15150:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "15149:9:28"
                  },
                  "scope": 8014,
                  "src": "15084:157:28",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7199,
                    "nodeType": "Block",
                    "src": "16011:174:28",
                    "statements": [
                      {
                        "assignments": [
                          7177,
                          7179
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 7177,
                            "mutability": "mutable",
                            "name": "success",
                            "nameLocation": "16027:7:28",
                            "nodeType": "VariableDeclaration",
                            "scope": 7199,
                            "src": "16022:12:28",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 7176,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "16022:4:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 7179,
                            "mutability": "mutable",
                            "name": "result",
                            "nameLocation": "16044:6:28",
                            "nodeType": "VariableDeclaration",
                            "scope": 7199,
                            "src": "16036:14:28",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 7178,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "16036:7:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 7185,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 7181,
                              "name": "b",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7167,
                              "src": "16064:1:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 7182,
                              "name": "e",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7169,
                              "src": "16067:1:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 7183,
                              "name": "m",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7171,
                              "src": "16070:1:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 7180,
                            "name": "tryModExp",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              7224,
                              7306
                            ],
                            "referencedDeclaration": 7224,
                            "src": "16054:9:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_uint256_$",
                              "typeString": "function (uint256,uint256,uint256) view returns (bool,uint256)"
                            }
                          },
                          "id": 7184,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16054:18:28",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$",
                            "typeString": "tuple(bool,uint256)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "16021:51:28"
                      },
                      {
                        "condition": {
                          "id": 7187,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "16086:8:28",
                          "subExpression": {
                            "id": 7186,
                            "name": "success",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7177,
                            "src": "16087:7:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7196,
                        "nodeType": "IfStatement",
                        "src": "16082:74:28",
                        "trueBody": {
                          "id": 7195,
                          "nodeType": "Block",
                          "src": "16096:60:28",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "expression": {
                                      "id": 7191,
                                      "name": "Panic",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4725,
                                      "src": "16122:5:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_Panic_$4725_$",
                                        "typeString": "type(library Panic)"
                                      }
                                    },
                                    "id": 7192,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberLocation": "16128:16:28",
                                    "memberName": "DIVISION_BY_ZERO",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 4692,
                                    "src": "16122:22:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "id": 7188,
                                    "name": "Panic",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4725,
                                    "src": "16110:5:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_Panic_$4725_$",
                                      "typeString": "type(library Panic)"
                                    }
                                  },
                                  "id": 7190,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "16116:5:28",
                                  "memberName": "panic",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 4724,
                                  "src": "16110:11:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$__$",
                                    "typeString": "function (uint256) pure"
                                  }
                                },
                                "id": 7193,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "16110:35:28",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 7194,
                              "nodeType": "ExpressionStatement",
                              "src": "16110:35:28"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "id": 7197,
                          "name": "result",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7179,
                          "src": "16172:6:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 7175,
                        "id": 7198,
                        "nodeType": "Return",
                        "src": "16165:13:28"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7165,
                    "nodeType": "StructuredDocumentation",
                    "src": "15247:678:28",
                    "text": " @dev Returns the modular exponentiation of the specified base, exponent and modulus (b ** e % m)\n Requirements:\n - modulus can't be zero\n - underlying staticcall to precompile must succeed\n IMPORTANT: The result is only valid if the underlying call succeeds. When using this function, make\n sure the chain you're using it on supports the precompiled contract for modular exponentiation\n at address 0x05 as specified in https://eips.ethereum.org/EIPS/eip-198[EIP-198]. Otherwise,\n the underlying function will succeed given the lack of a revert, but the result may be incorrectly\n interpreted as 0."
                  },
                  "id": 7200,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "modExp",
                  "nameLocation": "15939:6:28",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 7172,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7167,
                        "mutability": "mutable",
                        "name": "b",
                        "nameLocation": "15954:1:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 7200,
                        "src": "15946:9:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7166,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "15946:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7169,
                        "mutability": "mutable",
                        "name": "e",
                        "nameLocation": "15965:1:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 7200,
                        "src": "15957:9:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7168,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "15957:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7171,
                        "mutability": "mutable",
                        "name": "m",
                        "nameLocation": "15976:1:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 7200,
                        "src": "15968:9:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7170,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "15968:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "15945:33:28"
                  },
                  "returnParameters": {
                    "id": 7175,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7174,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 7200,
                        "src": "16002:7:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7173,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "16002:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "16001:9:28"
                  },
                  "scope": 8014,
                  "src": "15930:255:28",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7223,
                    "nodeType": "Block",
                    "src": "17039:1493:28",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 7216,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 7214,
                            "name": "m",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7207,
                            "src": "17053:1:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 7215,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "17058:1:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "17053:6:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7221,
                        "nodeType": "IfStatement",
                        "src": "17049:29:28",
                        "trueBody": {
                          "expression": {
                            "components": [
                              {
                                "hexValue": "66616c7365",
                                "id": 7217,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "17069:5:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "false"
                              },
                              {
                                "hexValue": "30",
                                "id": 7218,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "17076:1:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "id": 7219,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "17068:10:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_bool_$_t_rational_0_by_1_$",
                              "typeString": "tuple(bool,int_const 0)"
                            }
                          },
                          "functionReturnParameters": 7213,
                          "id": 7220,
                          "nodeType": "Return",
                          "src": "17061:17:28"
                        }
                      },
                      {
                        "AST": {
                          "nativeSrc": "17113:1413:28",
                          "nodeType": "YulBlock",
                          "src": "17113:1413:28",
                          "statements": [
                            {
                              "nativeSrc": "17127:22:28",
                              "nodeType": "YulVariableDeclaration",
                              "src": "17127:22:28",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nativeSrc": "17144:4:28",
                                    "nodeType": "YulLiteral",
                                    "src": "17144:4:28",
                                    "type": "",
                                    "value": "0x40"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nativeSrc": "17138:5:28",
                                  "nodeType": "YulIdentifier",
                                  "src": "17138:5:28"
                                },
                                "nativeSrc": "17138:11:28",
                                "nodeType": "YulFunctionCall",
                                "src": "17138:11:28"
                              },
                              "variables": [
                                {
                                  "name": "ptr",
                                  "nativeSrc": "17131:3:28",
                                  "nodeType": "YulTypedName",
                                  "src": "17131:3:28",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "ptr",
                                    "nativeSrc": "18057:3:28",
                                    "nodeType": "YulIdentifier",
                                    "src": "18057:3:28"
                                  },
                                  {
                                    "kind": "number",
                                    "nativeSrc": "18062:4:28",
                                    "nodeType": "YulLiteral",
                                    "src": "18062:4:28",
                                    "type": "",
                                    "value": "0x20"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nativeSrc": "18050:6:28",
                                  "nodeType": "YulIdentifier",
                                  "src": "18050:6:28"
                                },
                                "nativeSrc": "18050:17:28",
                                "nodeType": "YulFunctionCall",
                                "src": "18050:17:28"
                              },
                              "nativeSrc": "18050:17:28",
                              "nodeType": "YulExpressionStatement",
                              "src": "18050:17:28"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "ptr",
                                        "nativeSrc": "18091:3:28",
                                        "nodeType": "YulIdentifier",
                                        "src": "18091:3:28"
                                      },
                                      {
                                        "kind": "number",
                                        "nativeSrc": "18096:4:28",
                                        "nodeType": "YulLiteral",
                                        "src": "18096:4:28",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nativeSrc": "18087:3:28",
                                      "nodeType": "YulIdentifier",
                                      "src": "18087:3:28"
                                    },
                                    "nativeSrc": "18087:14:28",
                                    "nodeType": "YulFunctionCall",
                                    "src": "18087:14:28"
                                  },
                                  {
                                    "kind": "number",
                                    "nativeSrc": "18103:4:28",
                                    "nodeType": "YulLiteral",
                                    "src": "18103:4:28",
                                    "type": "",
                                    "value": "0x20"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nativeSrc": "18080:6:28",
                                  "nodeType": "YulIdentifier",
                                  "src": "18080:6:28"
                                },
                                "nativeSrc": "18080:28:28",
                                "nodeType": "YulFunctionCall",
                                "src": "18080:28:28"
                              },
                              "nativeSrc": "18080:28:28",
                              "nodeType": "YulExpressionStatement",
                              "src": "18080:28:28"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "ptr",
                                        "nativeSrc": "18132:3:28",
                                        "nodeType": "YulIdentifier",
                                        "src": "18132:3:28"
                                      },
                                      {
                                        "kind": "number",
                                        "nativeSrc": "18137:4:28",
                                        "nodeType": "YulLiteral",
                                        "src": "18137:4:28",
                                        "type": "",
                                        "value": "0x40"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nativeSrc": "18128:3:28",
                                      "nodeType": "YulIdentifier",
                                      "src": "18128:3:28"
                                    },
                                    "nativeSrc": "18128:14:28",
                                    "nodeType": "YulFunctionCall",
                                    "src": "18128:14:28"
                                  },
                                  {
                                    "kind": "number",
                                    "nativeSrc": "18144:4:28",
                                    "nodeType": "YulLiteral",
                                    "src": "18144:4:28",
                                    "type": "",
                                    "value": "0x20"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nativeSrc": "18121:6:28",
                                  "nodeType": "YulIdentifier",
                                  "src": "18121:6:28"
                                },
                                "nativeSrc": "18121:28:28",
                                "nodeType": "YulFunctionCall",
                                "src": "18121:28:28"
                              },
                              "nativeSrc": "18121:28:28",
                              "nodeType": "YulExpressionStatement",
                              "src": "18121:28:28"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "ptr",
                                        "nativeSrc": "18173:3:28",
                                        "nodeType": "YulIdentifier",
                                        "src": "18173:3:28"
                                      },
                                      {
                                        "kind": "number",
                                        "nativeSrc": "18178:4:28",
                                        "nodeType": "YulLiteral",
                                        "src": "18178:4:28",
                                        "type": "",
                                        "value": "0x60"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nativeSrc": "18169:3:28",
                                      "nodeType": "YulIdentifier",
                                      "src": "18169:3:28"
                                    },
                                    "nativeSrc": "18169:14:28",
                                    "nodeType": "YulFunctionCall",
                                    "src": "18169:14:28"
                                  },
                                  {
                                    "name": "b",
                                    "nativeSrc": "18185:1:28",
                                    "nodeType": "YulIdentifier",
                                    "src": "18185:1:28"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nativeSrc": "18162:6:28",
                                  "nodeType": "YulIdentifier",
                                  "src": "18162:6:28"
                                },
                                "nativeSrc": "18162:25:28",
                                "nodeType": "YulFunctionCall",
                                "src": "18162:25:28"
                              },
                              "nativeSrc": "18162:25:28",
                              "nodeType": "YulExpressionStatement",
                              "src": "18162:25:28"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "ptr",
                                        "nativeSrc": "18211:3:28",
                                        "nodeType": "YulIdentifier",
                                        "src": "18211:3:28"
                                      },
                                      {
                                        "kind": "number",
                                        "nativeSrc": "18216:4:28",
                                        "nodeType": "YulLiteral",
                                        "src": "18216:4:28",
                                        "type": "",
                                        "value": "0x80"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nativeSrc": "18207:3:28",
                                      "nodeType": "YulIdentifier",
                                      "src": "18207:3:28"
                                    },
                                    "nativeSrc": "18207:14:28",
                                    "nodeType": "YulFunctionCall",
                                    "src": "18207:14:28"
                                  },
                                  {
                                    "name": "e",
                                    "nativeSrc": "18223:1:28",
                                    "nodeType": "YulIdentifier",
                                    "src": "18223:1:28"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nativeSrc": "18200:6:28",
                                  "nodeType": "YulIdentifier",
                                  "src": "18200:6:28"
                                },
                                "nativeSrc": "18200:25:28",
                                "nodeType": "YulFunctionCall",
                                "src": "18200:25:28"
                              },
                              "nativeSrc": "18200:25:28",
                              "nodeType": "YulExpressionStatement",
                              "src": "18200:25:28"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "ptr",
                                        "nativeSrc": "18249:3:28",
                                        "nodeType": "YulIdentifier",
                                        "src": "18249:3:28"
                                      },
                                      {
                                        "kind": "number",
                                        "nativeSrc": "18254:4:28",
                                        "nodeType": "YulLiteral",
                                        "src": "18254:4:28",
                                        "type": "",
                                        "value": "0xa0"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nativeSrc": "18245:3:28",
                                      "nodeType": "YulIdentifier",
                                      "src": "18245:3:28"
                                    },
                                    "nativeSrc": "18245:14:28",
                                    "nodeType": "YulFunctionCall",
                                    "src": "18245:14:28"
                                  },
                                  {
                                    "name": "m",
                                    "nativeSrc": "18261:1:28",
                                    "nodeType": "YulIdentifier",
                                    "src": "18261:1:28"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nativeSrc": "18238:6:28",
                                  "nodeType": "YulIdentifier",
                                  "src": "18238:6:28"
                                },
                                "nativeSrc": "18238:25:28",
                                "nodeType": "YulFunctionCall",
                                "src": "18238:25:28"
                              },
                              "nativeSrc": "18238:25:28",
                              "nodeType": "YulExpressionStatement",
                              "src": "18238:25:28"
                            },
                            {
                              "nativeSrc": "18425:57:28",
                              "nodeType": "YulAssignment",
                              "src": "18425:57:28",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [],
                                    "functionName": {
                                      "name": "gas",
                                      "nativeSrc": "18447:3:28",
                                      "nodeType": "YulIdentifier",
                                      "src": "18447:3:28"
                                    },
                                    "nativeSrc": "18447:5:28",
                                    "nodeType": "YulFunctionCall",
                                    "src": "18447:5:28"
                                  },
                                  {
                                    "kind": "number",
                                    "nativeSrc": "18454:4:28",
                                    "nodeType": "YulLiteral",
                                    "src": "18454:4:28",
                                    "type": "",
                                    "value": "0x05"
                                  },
                                  {
                                    "name": "ptr",
                                    "nativeSrc": "18460:3:28",
                                    "nodeType": "YulIdentifier",
                                    "src": "18460:3:28"
                                  },
                                  {
                                    "kind": "number",
                                    "nativeSrc": "18465:4:28",
                                    "nodeType": "YulLiteral",
                                    "src": "18465:4:28",
                                    "type": "",
                                    "value": "0xc0"
                                  },
                                  {
                                    "kind": "number",
                                    "nativeSrc": "18471:4:28",
                                    "nodeType": "YulLiteral",
                                    "src": "18471:4:28",
                                    "type": "",
                                    "value": "0x00"
                                  },
                                  {
                                    "kind": "number",
                                    "nativeSrc": "18477:4:28",
                                    "nodeType": "YulLiteral",
                                    "src": "18477:4:28",
                                    "type": "",
                                    "value": "0x20"
                                  }
                                ],
                                "functionName": {
                                  "name": "staticcall",
                                  "nativeSrc": "18436:10:28",
                                  "nodeType": "YulIdentifier",
                                  "src": "18436:10:28"
                                },
                                "nativeSrc": "18436:46:28",
                                "nodeType": "YulFunctionCall",
                                "src": "18436:46:28"
                              },
                              "variableNames": [
                                {
                                  "name": "success",
                                  "nativeSrc": "18425:7:28",
                                  "nodeType": "YulIdentifier",
                                  "src": "18425:7:28"
                                }
                              ]
                            },
                            {
                              "nativeSrc": "18495:21:28",
                              "nodeType": "YulAssignment",
                              "src": "18495:21:28",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nativeSrc": "18511:4:28",
                                    "nodeType": "YulLiteral",
                                    "src": "18511:4:28",
                                    "type": "",
                                    "value": "0x00"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nativeSrc": "18505:5:28",
                                  "nodeType": "YulIdentifier",
                                  "src": "18505:5:28"
                                },
                                "nativeSrc": "18505:11:28",
                                "nodeType": "YulFunctionCall",
                                "src": "18505:11:28"
                              },
                              "variableNames": [
                                {
                                  "name": "result",
                                  "nativeSrc": "18495:6:28",
                                  "nodeType": "YulIdentifier",
                                  "src": "18495:6:28"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "paris",
                        "externalReferences": [
                          {
                            "declaration": 7203,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "18185:1:28",
                            "valueSize": 1
                          },
                          {
                            "declaration": 7205,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "18223:1:28",
                            "valueSize": 1
                          },
                          {
                            "declaration": 7207,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "18261:1:28",
                            "valueSize": 1
                          },
                          {
                            "declaration": 7212,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "18495:6:28",
                            "valueSize": 1
                          },
                          {
                            "declaration": 7210,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "18425:7:28",
                            "valueSize": 1
                          }
                        ],
                        "flags": [
                          "memory-safe"
                        ],
                        "id": 7222,
                        "nodeType": "InlineAssembly",
                        "src": "17088:1438:28"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7201,
                    "nodeType": "StructuredDocumentation",
                    "src": "16191:738:28",
                    "text": " @dev Returns the modular exponentiation of the specified base, exponent and modulus (b ** e % m).\n It includes a success flag indicating if the operation succeeded. Operation will be marked as failed if trying\n to operate modulo 0 or if the underlying precompile reverted.\n IMPORTANT: The result is only valid if the success flag is true. When using this function, make sure the chain\n you're using it on supports the precompiled contract for modular exponentiation at address 0x05 as specified in\n https://eips.ethereum.org/EIPS/eip-198[EIP-198]. Otherwise, the underlying function will succeed given the lack\n of a revert, but the result may be incorrectly interpreted as 0."
                  },
                  "id": 7224,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "tryModExp",
                  "nameLocation": "16943:9:28",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 7208,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7203,
                        "mutability": "mutable",
                        "name": "b",
                        "nameLocation": "16961:1:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 7224,
                        "src": "16953:9:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7202,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "16953:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7205,
                        "mutability": "mutable",
                        "name": "e",
                        "nameLocation": "16972:1:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 7224,
                        "src": "16964:9:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7204,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "16964:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7207,
                        "mutability": "mutable",
                        "name": "m",
                        "nameLocation": "16983:1:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 7224,
                        "src": "16975:9:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7206,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "16975:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "16952:33:28"
                  },
                  "returnParameters": {
                    "id": 7213,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7210,
                        "mutability": "mutable",
                        "name": "success",
                        "nameLocation": "17014:7:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 7224,
                        "src": "17009:12:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 7209,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "17009:4:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7212,
                        "mutability": "mutable",
                        "name": "result",
                        "nameLocation": "17031:6:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 7224,
                        "src": "17023:14:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7211,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "17023:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "17008:30:28"
                  },
                  "scope": 8014,
                  "src": "16934:1598:28",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7259,
                    "nodeType": "Block",
                    "src": "18729:179:28",
                    "statements": [
                      {
                        "assignments": [
                          7237,
                          7239
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 7237,
                            "mutability": "mutable",
                            "name": "success",
                            "nameLocation": "18745:7:28",
                            "nodeType": "VariableDeclaration",
                            "scope": 7259,
                            "src": "18740:12:28",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 7236,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "18740:4:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          },
                          {
                            "constant": false,
                            "id": 7239,
                            "mutability": "mutable",
                            "name": "result",
                            "nameLocation": "18767:6:28",
                            "nodeType": "VariableDeclaration",
                            "scope": 7259,
                            "src": "18754:19:28",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 7238,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "18754:5:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 7245,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 7241,
                              "name": "b",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7227,
                              "src": "18787:1:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "id": 7242,
                              "name": "e",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7229,
                              "src": "18790:1:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "id": 7243,
                              "name": "m",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7231,
                              "src": "18793:1:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 7240,
                            "name": "tryModExp",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              7224,
                              7306
                            ],
                            "referencedDeclaration": 7306,
                            "src": "18777:9:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                              "typeString": "function (bytes memory,bytes memory,bytes memory) view returns (bool,bytes memory)"
                            }
                          },
                          "id": 7244,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "18777:18:28",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                            "typeString": "tuple(bool,bytes memory)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "18739:56:28"
                      },
                      {
                        "condition": {
                          "id": 7247,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "18809:8:28",
                          "subExpression": {
                            "id": 7246,
                            "name": "success",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7237,
                            "src": "18810:7:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7256,
                        "nodeType": "IfStatement",
                        "src": "18805:74:28",
                        "trueBody": {
                          "id": 7255,
                          "nodeType": "Block",
                          "src": "18819:60:28",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "expression": {
                                      "id": 7251,
                                      "name": "Panic",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4725,
                                      "src": "18845:5:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_Panic_$4725_$",
                                        "typeString": "type(library Panic)"
                                      }
                                    },
                                    "id": 7252,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberLocation": "18851:16:28",
                                    "memberName": "DIVISION_BY_ZERO",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 4692,
                                    "src": "18845:22:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "id": 7248,
                                    "name": "Panic",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4725,
                                    "src": "18833:5:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_Panic_$4725_$",
                                      "typeString": "type(library Panic)"
                                    }
                                  },
                                  "id": 7250,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "18839:5:28",
                                  "memberName": "panic",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 4724,
                                  "src": "18833:11:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$__$",
                                    "typeString": "function (uint256) pure"
                                  }
                                },
                                "id": 7253,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "18833:35:28",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 7254,
                              "nodeType": "ExpressionStatement",
                              "src": "18833:35:28"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "id": 7257,
                          "name": "result",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7239,
                          "src": "18895:6:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "functionReturnParameters": 7235,
                        "id": 7258,
                        "nodeType": "Return",
                        "src": "18888:13:28"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7225,
                    "nodeType": "StructuredDocumentation",
                    "src": "18538:85:28",
                    "text": " @dev Variant of {modExp} that supports inputs of arbitrary length."
                  },
                  "id": 7260,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "modExp",
                  "nameLocation": "18637:6:28",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 7232,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7227,
                        "mutability": "mutable",
                        "name": "b",
                        "nameLocation": "18657:1:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 7260,
                        "src": "18644:14:28",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 7226,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "18644:5:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7229,
                        "mutability": "mutable",
                        "name": "e",
                        "nameLocation": "18673:1:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 7260,
                        "src": "18660:14:28",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 7228,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "18660:5:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7231,
                        "mutability": "mutable",
                        "name": "m",
                        "nameLocation": "18689:1:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 7260,
                        "src": "18676:14:28",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 7230,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "18676:5:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "18643:48:28"
                  },
                  "returnParameters": {
                    "id": 7235,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7234,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 7260,
                        "src": "18715:12:28",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 7233,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "18715:5:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "18714:14:28"
                  },
                  "scope": 8014,
                  "src": "18628:280:28",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7305,
                    "nodeType": "Block",
                    "src": "19162:771:28",
                    "statements": [
                      {
                        "condition": {
                          "arguments": [
                            {
                              "id": 7275,
                              "name": "m",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7267,
                              "src": "19187:1:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 7274,
                            "name": "_zeroBytes",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7339,
                            "src": "19176:10:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bool_$",
                              "typeString": "function (bytes memory) pure returns (bool)"
                            }
                          },
                          "id": 7276,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "19176:13:28",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7284,
                        "nodeType": "IfStatement",
                        "src": "19172:47:28",
                        "trueBody": {
                          "expression": {
                            "components": [
                              {
                                "hexValue": "66616c7365",
                                "id": 7277,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "19199:5:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "false"
                              },
                              {
                                "arguments": [
                                  {
                                    "hexValue": "30",
                                    "id": 7280,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "19216:1:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 7279,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "NewExpression",
                                  "src": "19206:9:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$",
                                    "typeString": "function (uint256) pure returns (bytes memory)"
                                  },
                                  "typeName": {
                                    "id": 7278,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "19210:5:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_storage_ptr",
                                      "typeString": "bytes"
                                    }
                                  }
                                },
                                "id": 7281,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "19206:12:28",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "id": 7282,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "19198:21:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                              "typeString": "tuple(bool,bytes memory)"
                            }
                          },
                          "functionReturnParameters": 7273,
                          "id": 7283,
                          "nodeType": "Return",
                          "src": "19191:28:28"
                        }
                      },
                      {
                        "assignments": [
                          7286
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 7286,
                            "mutability": "mutable",
                            "name": "mLen",
                            "nameLocation": "19238:4:28",
                            "nodeType": "VariableDeclaration",
                            "scope": 7305,
                            "src": "19230:12:28",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 7285,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "19230:7:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 7289,
                        "initialValue": {
                          "expression": {
                            "id": 7287,
                            "name": "m",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7267,
                            "src": "19245:1:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 7288,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "19247:6:28",
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "19245:8:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "19230:23:28"
                      },
                      {
                        "expression": {
                          "id": 7302,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 7290,
                            "name": "result",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7272,
                            "src": "19335:6:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "expression": {
                                  "id": 7293,
                                  "name": "b",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7263,
                                  "src": "19361:1:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                },
                                "id": 7294,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "19363:6:28",
                                "memberName": "length",
                                "nodeType": "MemberAccess",
                                "src": "19361:8:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "expression": {
                                  "id": 7295,
                                  "name": "e",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7265,
                                  "src": "19371:1:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                },
                                "id": 7296,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "19373:6:28",
                                "memberName": "length",
                                "nodeType": "MemberAccess",
                                "src": "19371:8:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "id": 7297,
                                "name": "mLen",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7286,
                                "src": "19381:4:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "id": 7298,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7263,
                                "src": "19387:1:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              {
                                "id": 7299,
                                "name": "e",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7265,
                                "src": "19390:1:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              },
                              {
                                "id": 7300,
                                "name": "m",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7267,
                                "src": "19393:1:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "expression": {
                                "id": 7291,
                                "name": "abi",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -1,
                                "src": "19344:3:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_abi",
                                  "typeString": "abi"
                                }
                              },
                              "id": 7292,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberLocation": "19348:12:28",
                              "memberName": "encodePacked",
                              "nodeType": "MemberAccess",
                              "src": "19344:16:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                "typeString": "function () pure returns (bytes memory)"
                              }
                            },
                            "id": 7301,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "19344:51:28",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "src": "19335:60:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 7303,
                        "nodeType": "ExpressionStatement",
                        "src": "19335:60:28"
                      },
                      {
                        "AST": {
                          "nativeSrc": "19431:496:28",
                          "nodeType": "YulBlock",
                          "src": "19431:496:28",
                          "statements": [
                            {
                              "nativeSrc": "19445:32:28",
                              "nodeType": "YulVariableDeclaration",
                              "src": "19445:32:28",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "result",
                                    "nativeSrc": "19464:6:28",
                                    "nodeType": "YulIdentifier",
                                    "src": "19464:6:28"
                                  },
                                  {
                                    "kind": "number",
                                    "nativeSrc": "19472:4:28",
                                    "nodeType": "YulLiteral",
                                    "src": "19472:4:28",
                                    "type": "",
                                    "value": "0x20"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nativeSrc": "19460:3:28",
                                  "nodeType": "YulIdentifier",
                                  "src": "19460:3:28"
                                },
                                "nativeSrc": "19460:17:28",
                                "nodeType": "YulFunctionCall",
                                "src": "19460:17:28"
                              },
                              "variables": [
                                {
                                  "name": "dataPtr",
                                  "nativeSrc": "19449:7:28",
                                  "nodeType": "YulTypedName",
                                  "src": "19449:7:28",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nativeSrc": "19567:73:28",
                              "nodeType": "YulAssignment",
                              "src": "19567:73:28",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [],
                                    "functionName": {
                                      "name": "gas",
                                      "nativeSrc": "19589:3:28",
                                      "nodeType": "YulIdentifier",
                                      "src": "19589:3:28"
                                    },
                                    "nativeSrc": "19589:5:28",
                                    "nodeType": "YulFunctionCall",
                                    "src": "19589:5:28"
                                  },
                                  {
                                    "kind": "number",
                                    "nativeSrc": "19596:4:28",
                                    "nodeType": "YulLiteral",
                                    "src": "19596:4:28",
                                    "type": "",
                                    "value": "0x05"
                                  },
                                  {
                                    "name": "dataPtr",
                                    "nativeSrc": "19602:7:28",
                                    "nodeType": "YulIdentifier",
                                    "src": "19602:7:28"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "result",
                                        "nativeSrc": "19617:6:28",
                                        "nodeType": "YulIdentifier",
                                        "src": "19617:6:28"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mload",
                                      "nativeSrc": "19611:5:28",
                                      "nodeType": "YulIdentifier",
                                      "src": "19611:5:28"
                                    },
                                    "nativeSrc": "19611:13:28",
                                    "nodeType": "YulFunctionCall",
                                    "src": "19611:13:28"
                                  },
                                  {
                                    "name": "dataPtr",
                                    "nativeSrc": "19626:7:28",
                                    "nodeType": "YulIdentifier",
                                    "src": "19626:7:28"
                                  },
                                  {
                                    "name": "mLen",
                                    "nativeSrc": "19635:4:28",
                                    "nodeType": "YulIdentifier",
                                    "src": "19635:4:28"
                                  }
                                ],
                                "functionName": {
                                  "name": "staticcall",
                                  "nativeSrc": "19578:10:28",
                                  "nodeType": "YulIdentifier",
                                  "src": "19578:10:28"
                                },
                                "nativeSrc": "19578:62:28",
                                "nodeType": "YulFunctionCall",
                                "src": "19578:62:28"
                              },
                              "variableNames": [
                                {
                                  "name": "success",
                                  "nativeSrc": "19567:7:28",
                                  "nodeType": "YulIdentifier",
                                  "src": "19567:7:28"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "result",
                                    "nativeSrc": "19796:6:28",
                                    "nodeType": "YulIdentifier",
                                    "src": "19796:6:28"
                                  },
                                  {
                                    "name": "mLen",
                                    "nativeSrc": "19804:4:28",
                                    "nodeType": "YulIdentifier",
                                    "src": "19804:4:28"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nativeSrc": "19789:6:28",
                                  "nodeType": "YulIdentifier",
                                  "src": "19789:6:28"
                                },
                                "nativeSrc": "19789:20:28",
                                "nodeType": "YulFunctionCall",
                                "src": "19789:20:28"
                              },
                              "nativeSrc": "19789:20:28",
                              "nodeType": "YulExpressionStatement",
                              "src": "19789:20:28"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nativeSrc": "19892:4:28",
                                    "nodeType": "YulLiteral",
                                    "src": "19892:4:28",
                                    "type": "",
                                    "value": "0x40"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataPtr",
                                        "nativeSrc": "19902:7:28",
                                        "nodeType": "YulIdentifier",
                                        "src": "19902:7:28"
                                      },
                                      {
                                        "name": "mLen",
                                        "nativeSrc": "19911:4:28",
                                        "nodeType": "YulIdentifier",
                                        "src": "19911:4:28"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nativeSrc": "19898:3:28",
                                      "nodeType": "YulIdentifier",
                                      "src": "19898:3:28"
                                    },
                                    "nativeSrc": "19898:18:28",
                                    "nodeType": "YulFunctionCall",
                                    "src": "19898:18:28"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nativeSrc": "19885:6:28",
                                  "nodeType": "YulIdentifier",
                                  "src": "19885:6:28"
                                },
                                "nativeSrc": "19885:32:28",
                                "nodeType": "YulFunctionCall",
                                "src": "19885:32:28"
                              },
                              "nativeSrc": "19885:32:28",
                              "nodeType": "YulExpressionStatement",
                              "src": "19885:32:28"
                            }
                          ]
                        },
                        "evmVersion": "paris",
                        "externalReferences": [
                          {
                            "declaration": 7286,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "19635:4:28",
                            "valueSize": 1
                          },
                          {
                            "declaration": 7286,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "19804:4:28",
                            "valueSize": 1
                          },
                          {
                            "declaration": 7286,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "19911:4:28",
                            "valueSize": 1
                          },
                          {
                            "declaration": 7272,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "19464:6:28",
                            "valueSize": 1
                          },
                          {
                            "declaration": 7272,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "19617:6:28",
                            "valueSize": 1
                          },
                          {
                            "declaration": 7272,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "19796:6:28",
                            "valueSize": 1
                          },
                          {
                            "declaration": 7270,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "19567:7:28",
                            "valueSize": 1
                          }
                        ],
                        "flags": [
                          "memory-safe"
                        ],
                        "id": 7304,
                        "nodeType": "InlineAssembly",
                        "src": "19406:521:28"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7261,
                    "nodeType": "StructuredDocumentation",
                    "src": "18914:88:28",
                    "text": " @dev Variant of {tryModExp} that supports inputs of arbitrary length."
                  },
                  "id": 7306,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "tryModExp",
                  "nameLocation": "19016:9:28",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 7268,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7263,
                        "mutability": "mutable",
                        "name": "b",
                        "nameLocation": "19048:1:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 7306,
                        "src": "19035:14:28",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 7262,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "19035:5:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7265,
                        "mutability": "mutable",
                        "name": "e",
                        "nameLocation": "19072:1:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 7306,
                        "src": "19059:14:28",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 7264,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "19059:5:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7267,
                        "mutability": "mutable",
                        "name": "m",
                        "nameLocation": "19096:1:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 7306,
                        "src": "19083:14:28",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 7266,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "19083:5:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "19025:78:28"
                  },
                  "returnParameters": {
                    "id": 7273,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7270,
                        "mutability": "mutable",
                        "name": "success",
                        "nameLocation": "19132:7:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 7306,
                        "src": "19127:12:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 7269,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "19127:4:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7272,
                        "mutability": "mutable",
                        "name": "result",
                        "nameLocation": "19154:6:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 7306,
                        "src": "19141:19:28",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 7271,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "19141:5:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "19126:35:28"
                  },
                  "scope": 8014,
                  "src": "19007:926:28",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7338,
                    "nodeType": "Block",
                    "src": "20088:176:28",
                    "statements": [
                      {
                        "body": {
                          "id": 7334,
                          "nodeType": "Block",
                          "src": "20145:92:28",
                          "statements": [
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_bytes1",
                                  "typeString": "bytes1"
                                },
                                "id": 7329,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "baseExpression": {
                                    "id": 7325,
                                    "name": "byteArray",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7309,
                                    "src": "20163:9:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  },
                                  "id": 7327,
                                  "indexExpression": {
                                    "id": 7326,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7315,
                                    "src": "20173:1:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "20163:12:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes1",
                                    "typeString": "bytes1"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "!=",
                                "rightExpression": {
                                  "hexValue": "30",
                                  "id": 7328,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "20179:1:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "20163:17:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 7333,
                              "nodeType": "IfStatement",
                              "src": "20159:68:28",
                              "trueBody": {
                                "id": 7332,
                                "nodeType": "Block",
                                "src": "20182:45:28",
                                "statements": [
                                  {
                                    "expression": {
                                      "hexValue": "66616c7365",
                                      "id": 7330,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "bool",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "20207:5:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      },
                                      "value": "false"
                                    },
                                    "functionReturnParameters": 7313,
                                    "id": 7331,
                                    "nodeType": "Return",
                                    "src": "20200:12:28"
                                  }
                                ]
                              }
                            }
                          ]
                        },
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 7321,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 7318,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7315,
                            "src": "20118:1:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "expression": {
                              "id": 7319,
                              "name": "byteArray",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7309,
                              "src": "20122:9:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            "id": 7320,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "20132:6:28",
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "20122:16:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "20118:20:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 7335,
                        "initializationExpression": {
                          "assignments": [
                            7315
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 7315,
                              "mutability": "mutable",
                              "name": "i",
                              "nameLocation": "20111:1:28",
                              "nodeType": "VariableDeclaration",
                              "scope": 7335,
                              "src": "20103:9:28",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 7314,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "20103:7:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "visibility": "internal"
                            }
                          ],
                          "id": 7317,
                          "initialValue": {
                            "hexValue": "30",
                            "id": 7316,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "20115:1:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "20103:13:28"
                        },
                        "isSimpleCounterLoop": true,
                        "loopExpression": {
                          "expression": {
                            "id": 7323,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": true,
                            "src": "20140:3:28",
                            "subExpression": {
                              "id": 7322,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7315,
                              "src": "20142:1:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 7324,
                          "nodeType": "ExpressionStatement",
                          "src": "20140:3:28"
                        },
                        "nodeType": "ForStatement",
                        "src": "20098:139:28"
                      },
                      {
                        "expression": {
                          "hexValue": "74727565",
                          "id": 7336,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "20253:4:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 7313,
                        "id": 7337,
                        "nodeType": "Return",
                        "src": "20246:11:28"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7307,
                    "nodeType": "StructuredDocumentation",
                    "src": "19939:72:28",
                    "text": " @dev Returns whether the provided byte array is zero."
                  },
                  "id": 7339,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_zeroBytes",
                  "nameLocation": "20025:10:28",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 7310,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7309,
                        "mutability": "mutable",
                        "name": "byteArray",
                        "nameLocation": "20049:9:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 7339,
                        "src": "20036:22:28",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 7308,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "20036:5:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "20035:24:28"
                  },
                  "returnParameters": {
                    "id": 7313,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7312,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 7339,
                        "src": "20082:4:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 7311,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "20082:4:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "20081:6:28"
                  },
                  "scope": 8014,
                  "src": "20016:248:28",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "private"
                },
                {
                  "body": {
                    "id": 7557,
                    "nodeType": "Block",
                    "src": "20624:5124:28",
                    "statements": [
                      {
                        "id": 7556,
                        "nodeType": "UncheckedBlock",
                        "src": "20634:5108:28",
                        "statements": [
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 7349,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 7347,
                                "name": "a",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7342,
                                "src": "20728:1:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<=",
                              "rightExpression": {
                                "hexValue": "31",
                                "id": 7348,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "20733:1:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "src": "20728:6:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 7353,
                            "nodeType": "IfStatement",
                            "src": "20724:53:28",
                            "trueBody": {
                              "id": 7352,
                              "nodeType": "Block",
                              "src": "20736:41:28",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 7350,
                                    "name": "a",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7342,
                                    "src": "20761:1:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "functionReturnParameters": 7346,
                                  "id": 7351,
                                  "nodeType": "Return",
                                  "src": "20754:8:28"
                                }
                              ]
                            }
                          },
                          {
                            "assignments": [
                              7355
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 7355,
                                "mutability": "mutable",
                                "name": "aa",
                                "nameLocation": "21712:2:28",
                                "nodeType": "VariableDeclaration",
                                "scope": 7556,
                                "src": "21704:10:28",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 7354,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "21704:7:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 7357,
                            "initialValue": {
                              "id": 7356,
                              "name": "a",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7342,
                              "src": "21717:1:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "21704:14:28"
                          },
                          {
                            "assignments": [
                              7359
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 7359,
                                "mutability": "mutable",
                                "name": "xn",
                                "nameLocation": "21740:2:28",
                                "nodeType": "VariableDeclaration",
                                "scope": 7556,
                                "src": "21732:10:28",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 7358,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "21732:7:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 7361,
                            "initialValue": {
                              "hexValue": "31",
                              "id": 7360,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "21745:1:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "21732:14:28"
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 7367,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 7362,
                                "name": "aa",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7355,
                                "src": "21765:2:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_rational_340282366920938463463374607431768211456_by_1",
                                      "typeString": "int_const 3402...(31 digits omitted)...1456"
                                    },
                                    "id": 7365,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "hexValue": "31",
                                      "id": 7363,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "21772:1:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "<<",
                                    "rightExpression": {
                                      "hexValue": "313238",
                                      "id": 7364,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "21777:3:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_128_by_1",
                                        "typeString": "int_const 128"
                                      },
                                      "value": "128"
                                    },
                                    "src": "21772:8:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_340282366920938463463374607431768211456_by_1",
                                      "typeString": "int_const 3402...(31 digits omitted)...1456"
                                    }
                                  }
                                ],
                                "id": 7366,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "21771:10:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_340282366920938463463374607431768211456_by_1",
                                  "typeString": "int_const 3402...(31 digits omitted)...1456"
                                }
                              },
                              "src": "21765:16:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 7377,
                            "nodeType": "IfStatement",
                            "src": "21761:92:28",
                            "trueBody": {
                              "id": 7376,
                              "nodeType": "Block",
                              "src": "21783:70:28",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 7370,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 7368,
                                      "name": "aa",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7355,
                                      "src": "21801:2:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": ">>=",
                                    "rightHandSide": {
                                      "hexValue": "313238",
                                      "id": 7369,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "21808:3:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_128_by_1",
                                        "typeString": "int_const 128"
                                      },
                                      "value": "128"
                                    },
                                    "src": "21801:10:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 7371,
                                  "nodeType": "ExpressionStatement",
                                  "src": "21801:10:28"
                                },
                                {
                                  "expression": {
                                    "id": 7374,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 7372,
                                      "name": "xn",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7359,
                                      "src": "21829:2:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "<<=",
                                    "rightHandSide": {
                                      "hexValue": "3634",
                                      "id": 7373,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "21836:2:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_64_by_1",
                                        "typeString": "int_const 64"
                                      },
                                      "value": "64"
                                    },
                                    "src": "21829:9:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 7375,
                                  "nodeType": "ExpressionStatement",
                                  "src": "21829:9:28"
                                }
                              ]
                            }
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 7383,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 7378,
                                "name": "aa",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7355,
                                "src": "21870:2:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_rational_18446744073709551616_by_1",
                                      "typeString": "int_const 18446744073709551616"
                                    },
                                    "id": 7381,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "hexValue": "31",
                                      "id": 7379,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "21877:1:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "<<",
                                    "rightExpression": {
                                      "hexValue": "3634",
                                      "id": 7380,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "21882:2:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_64_by_1",
                                        "typeString": "int_const 64"
                                      },
                                      "value": "64"
                                    },
                                    "src": "21877:7:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_18446744073709551616_by_1",
                                      "typeString": "int_const 18446744073709551616"
                                    }
                                  }
                                ],
                                "id": 7382,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "21876:9:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_18446744073709551616_by_1",
                                  "typeString": "int_const 18446744073709551616"
                                }
                              },
                              "src": "21870:15:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 7393,
                            "nodeType": "IfStatement",
                            "src": "21866:90:28",
                            "trueBody": {
                              "id": 7392,
                              "nodeType": "Block",
                              "src": "21887:69:28",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 7386,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 7384,
                                      "name": "aa",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7355,
                                      "src": "21905:2:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": ">>=",
                                    "rightHandSide": {
                                      "hexValue": "3634",
                                      "id": 7385,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "21912:2:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_64_by_1",
                                        "typeString": "int_const 64"
                                      },
                                      "value": "64"
                                    },
                                    "src": "21905:9:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 7387,
                                  "nodeType": "ExpressionStatement",
                                  "src": "21905:9:28"
                                },
                                {
                                  "expression": {
                                    "id": 7390,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 7388,
                                      "name": "xn",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7359,
                                      "src": "21932:2:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "<<=",
                                    "rightHandSide": {
                                      "hexValue": "3332",
                                      "id": 7389,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "21939:2:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_32_by_1",
                                        "typeString": "int_const 32"
                                      },
                                      "value": "32"
                                    },
                                    "src": "21932:9:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 7391,
                                  "nodeType": "ExpressionStatement",
                                  "src": "21932:9:28"
                                }
                              ]
                            }
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 7399,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 7394,
                                "name": "aa",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7355,
                                "src": "21973:2:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_rational_4294967296_by_1",
                                      "typeString": "int_const 4294967296"
                                    },
                                    "id": 7397,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "hexValue": "31",
                                      "id": 7395,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "21980:1:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "<<",
                                    "rightExpression": {
                                      "hexValue": "3332",
                                      "id": 7396,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "21985:2:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_32_by_1",
                                        "typeString": "int_const 32"
                                      },
                                      "value": "32"
                                    },
                                    "src": "21980:7:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_4294967296_by_1",
                                      "typeString": "int_const 4294967296"
                                    }
                                  }
                                ],
                                "id": 7398,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "21979:9:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_4294967296_by_1",
                                  "typeString": "int_const 4294967296"
                                }
                              },
                              "src": "21973:15:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 7409,
                            "nodeType": "IfStatement",
                            "src": "21969:90:28",
                            "trueBody": {
                              "id": 7408,
                              "nodeType": "Block",
                              "src": "21990:69:28",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 7402,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 7400,
                                      "name": "aa",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7355,
                                      "src": "22008:2:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": ">>=",
                                    "rightHandSide": {
                                      "hexValue": "3332",
                                      "id": 7401,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "22015:2:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_32_by_1",
                                        "typeString": "int_const 32"
                                      },
                                      "value": "32"
                                    },
                                    "src": "22008:9:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 7403,
                                  "nodeType": "ExpressionStatement",
                                  "src": "22008:9:28"
                                },
                                {
                                  "expression": {
                                    "id": 7406,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 7404,
                                      "name": "xn",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7359,
                                      "src": "22035:2:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "<<=",
                                    "rightHandSide": {
                                      "hexValue": "3136",
                                      "id": 7405,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "22042:2:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_16_by_1",
                                        "typeString": "int_const 16"
                                      },
                                      "value": "16"
                                    },
                                    "src": "22035:9:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 7407,
                                  "nodeType": "ExpressionStatement",
                                  "src": "22035:9:28"
                                }
                              ]
                            }
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 7415,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 7410,
                                "name": "aa",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7355,
                                "src": "22076:2:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_rational_65536_by_1",
                                      "typeString": "int_const 65536"
                                    },
                                    "id": 7413,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "hexValue": "31",
                                      "id": 7411,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "22083:1:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "<<",
                                    "rightExpression": {
                                      "hexValue": "3136",
                                      "id": 7412,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "22088:2:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_16_by_1",
                                        "typeString": "int_const 16"
                                      },
                                      "value": "16"
                                    },
                                    "src": "22083:7:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_65536_by_1",
                                      "typeString": "int_const 65536"
                                    }
                                  }
                                ],
                                "id": 7414,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "22082:9:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_65536_by_1",
                                  "typeString": "int_const 65536"
                                }
                              },
                              "src": "22076:15:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 7425,
                            "nodeType": "IfStatement",
                            "src": "22072:89:28",
                            "trueBody": {
                              "id": 7424,
                              "nodeType": "Block",
                              "src": "22093:68:28",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 7418,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 7416,
                                      "name": "aa",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7355,
                                      "src": "22111:2:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": ">>=",
                                    "rightHandSide": {
                                      "hexValue": "3136",
                                      "id": 7417,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "22118:2:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_16_by_1",
                                        "typeString": "int_const 16"
                                      },
                                      "value": "16"
                                    },
                                    "src": "22111:9:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 7419,
                                  "nodeType": "ExpressionStatement",
                                  "src": "22111:9:28"
                                },
                                {
                                  "expression": {
                                    "id": 7422,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 7420,
                                      "name": "xn",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7359,
                                      "src": "22138:2:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "<<=",
                                    "rightHandSide": {
                                      "hexValue": "38",
                                      "id": 7421,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "22145:1:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_8_by_1",
                                        "typeString": "int_const 8"
                                      },
                                      "value": "8"
                                    },
                                    "src": "22138:8:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 7423,
                                  "nodeType": "ExpressionStatement",
                                  "src": "22138:8:28"
                                }
                              ]
                            }
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 7431,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 7426,
                                "name": "aa",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7355,
                                "src": "22178:2:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_rational_256_by_1",
                                      "typeString": "int_const 256"
                                    },
                                    "id": 7429,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "hexValue": "31",
                                      "id": 7427,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "22185:1:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "<<",
                                    "rightExpression": {
                                      "hexValue": "38",
                                      "id": 7428,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "22190:1:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_8_by_1",
                                        "typeString": "int_const 8"
                                      },
                                      "value": "8"
                                    },
                                    "src": "22185:6:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_256_by_1",
                                      "typeString": "int_const 256"
                                    }
                                  }
                                ],
                                "id": 7430,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "22184:8:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_256_by_1",
                                  "typeString": "int_const 256"
                                }
                              },
                              "src": "22178:14:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 7441,
                            "nodeType": "IfStatement",
                            "src": "22174:87:28",
                            "trueBody": {
                              "id": 7440,
                              "nodeType": "Block",
                              "src": "22194:67:28",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 7434,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 7432,
                                      "name": "aa",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7355,
                                      "src": "22212:2:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": ">>=",
                                    "rightHandSide": {
                                      "hexValue": "38",
                                      "id": 7433,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "22219:1:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_8_by_1",
                                        "typeString": "int_const 8"
                                      },
                                      "value": "8"
                                    },
                                    "src": "22212:8:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 7435,
                                  "nodeType": "ExpressionStatement",
                                  "src": "22212:8:28"
                                },
                                {
                                  "expression": {
                                    "id": 7438,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 7436,
                                      "name": "xn",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7359,
                                      "src": "22238:2:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "<<=",
                                    "rightHandSide": {
                                      "hexValue": "34",
                                      "id": 7437,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "22245:1:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_4_by_1",
                                        "typeString": "int_const 4"
                                      },
                                      "value": "4"
                                    },
                                    "src": "22238:8:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 7439,
                                  "nodeType": "ExpressionStatement",
                                  "src": "22238:8:28"
                                }
                              ]
                            }
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 7447,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 7442,
                                "name": "aa",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7355,
                                "src": "22278:2:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_rational_16_by_1",
                                      "typeString": "int_const 16"
                                    },
                                    "id": 7445,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "hexValue": "31",
                                      "id": 7443,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "22285:1:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "<<",
                                    "rightExpression": {
                                      "hexValue": "34",
                                      "id": 7444,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "22290:1:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_4_by_1",
                                        "typeString": "int_const 4"
                                      },
                                      "value": "4"
                                    },
                                    "src": "22285:6:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_16_by_1",
                                      "typeString": "int_const 16"
                                    }
                                  }
                                ],
                                "id": 7446,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "22284:8:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_16_by_1",
                                  "typeString": "int_const 16"
                                }
                              },
                              "src": "22278:14:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 7457,
                            "nodeType": "IfStatement",
                            "src": "22274:87:28",
                            "trueBody": {
                              "id": 7456,
                              "nodeType": "Block",
                              "src": "22294:67:28",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 7450,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 7448,
                                      "name": "aa",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7355,
                                      "src": "22312:2:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": ">>=",
                                    "rightHandSide": {
                                      "hexValue": "34",
                                      "id": 7449,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "22319:1:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_4_by_1",
                                        "typeString": "int_const 4"
                                      },
                                      "value": "4"
                                    },
                                    "src": "22312:8:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 7451,
                                  "nodeType": "ExpressionStatement",
                                  "src": "22312:8:28"
                                },
                                {
                                  "expression": {
                                    "id": 7454,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 7452,
                                      "name": "xn",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7359,
                                      "src": "22338:2:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "<<=",
                                    "rightHandSide": {
                                      "hexValue": "32",
                                      "id": 7453,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "22345:1:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_2_by_1",
                                        "typeString": "int_const 2"
                                      },
                                      "value": "2"
                                    },
                                    "src": "22338:8:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 7455,
                                  "nodeType": "ExpressionStatement",
                                  "src": "22338:8:28"
                                }
                              ]
                            }
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 7463,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 7458,
                                "name": "aa",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7355,
                                "src": "22378:2:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_rational_4_by_1",
                                      "typeString": "int_const 4"
                                    },
                                    "id": 7461,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "hexValue": "31",
                                      "id": 7459,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "22385:1:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "<<",
                                    "rightExpression": {
                                      "hexValue": "32",
                                      "id": 7460,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "22390:1:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_2_by_1",
                                        "typeString": "int_const 2"
                                      },
                                      "value": "2"
                                    },
                                    "src": "22385:6:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_4_by_1",
                                      "typeString": "int_const 4"
                                    }
                                  }
                                ],
                                "id": 7462,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "22384:8:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_4_by_1",
                                  "typeString": "int_const 4"
                                }
                              },
                              "src": "22378:14:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 7469,
                            "nodeType": "IfStatement",
                            "src": "22374:61:28",
                            "trueBody": {
                              "id": 7468,
                              "nodeType": "Block",
                              "src": "22394:41:28",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 7466,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 7464,
                                      "name": "xn",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7359,
                                      "src": "22412:2:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "<<=",
                                    "rightHandSide": {
                                      "hexValue": "31",
                                      "id": 7465,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "22419:1:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "src": "22412:8:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 7467,
                                  "nodeType": "ExpressionStatement",
                                  "src": "22412:8:28"
                                }
                              ]
                            }
                          },
                          {
                            "expression": {
                              "id": 7477,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 7470,
                                "name": "xn",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7359,
                                "src": "22855:2:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 7476,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "components": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 7473,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "hexValue": "33",
                                        "id": 7471,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "22861:1:28",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_3_by_1",
                                          "typeString": "int_const 3"
                                        },
                                        "value": "3"
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "*",
                                      "rightExpression": {
                                        "id": 7472,
                                        "name": "xn",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7359,
                                        "src": "22865:2:28",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "22861:6:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 7474,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "22860:8:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">>",
                                "rightExpression": {
                                  "hexValue": "31",
                                  "id": 7475,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "22872:1:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "22860:13:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "22855:18:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 7478,
                            "nodeType": "ExpressionStatement",
                            "src": "22855:18:28"
                          },
                          {
                            "expression": {
                              "id": 7488,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 7479,
                                "name": "xn",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7359,
                                "src": "24760:2:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 7487,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "components": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 7484,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 7480,
                                        "name": "xn",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7359,
                                        "src": "24766:2:28",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "+",
                                      "rightExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 7483,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 7481,
                                          "name": "a",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7342,
                                          "src": "24771:1:28",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "/",
                                        "rightExpression": {
                                          "id": 7482,
                                          "name": "xn",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7359,
                                          "src": "24775:2:28",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "24771:6:28",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "24766:11:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 7485,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "24765:13:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">>",
                                "rightExpression": {
                                  "hexValue": "31",
                                  "id": 7486,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "24782:1:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "24765:18:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "24760:23:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 7489,
                            "nodeType": "ExpressionStatement",
                            "src": "24760:23:28"
                          },
                          {
                            "expression": {
                              "id": 7499,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 7490,
                                "name": "xn",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7359,
                                "src": "24869:2:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 7498,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "components": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 7495,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 7491,
                                        "name": "xn",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7359,
                                        "src": "24875:2:28",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "+",
                                      "rightExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 7494,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 7492,
                                          "name": "a",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7342,
                                          "src": "24880:1:28",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "/",
                                        "rightExpression": {
                                          "id": 7493,
                                          "name": "xn",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7359,
                                          "src": "24884:2:28",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "24880:6:28",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "24875:11:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 7496,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "24874:13:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">>",
                                "rightExpression": {
                                  "hexValue": "31",
                                  "id": 7497,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "24891:1:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "24874:18:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "24869:23:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 7500,
                            "nodeType": "ExpressionStatement",
                            "src": "24869:23:28"
                          },
                          {
                            "expression": {
                              "id": 7510,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 7501,
                                "name": "xn",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7359,
                                "src": "24980:2:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 7509,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "components": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 7506,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 7502,
                                        "name": "xn",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7359,
                                        "src": "24986:2:28",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "+",
                                      "rightExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 7505,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 7503,
                                          "name": "a",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7342,
                                          "src": "24991:1:28",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "/",
                                        "rightExpression": {
                                          "id": 7504,
                                          "name": "xn",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7359,
                                          "src": "24995:2:28",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "24991:6:28",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "24986:11:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 7507,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "24985:13:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">>",
                                "rightExpression": {
                                  "hexValue": "31",
                                  "id": 7508,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "25002:1:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "24985:18:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "24980:23:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 7511,
                            "nodeType": "ExpressionStatement",
                            "src": "24980:23:28"
                          },
                          {
                            "expression": {
                              "id": 7521,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 7512,
                                "name": "xn",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7359,
                                "src": "25089:2:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 7520,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "components": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 7517,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 7513,
                                        "name": "xn",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7359,
                                        "src": "25095:2:28",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "+",
                                      "rightExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 7516,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 7514,
                                          "name": "a",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7342,
                                          "src": "25100:1:28",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "/",
                                        "rightExpression": {
                                          "id": 7515,
                                          "name": "xn",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7359,
                                          "src": "25104:2:28",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "25100:6:28",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "25095:11:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 7518,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "25094:13:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">>",
                                "rightExpression": {
                                  "hexValue": "31",
                                  "id": 7519,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "25111:1:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "25094:18:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "25089:23:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 7522,
                            "nodeType": "ExpressionStatement",
                            "src": "25089:23:28"
                          },
                          {
                            "expression": {
                              "id": 7532,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 7523,
                                "name": "xn",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7359,
                                "src": "25199:2:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 7531,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "components": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 7528,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 7524,
                                        "name": "xn",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7359,
                                        "src": "25205:2:28",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "+",
                                      "rightExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 7527,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 7525,
                                          "name": "a",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7342,
                                          "src": "25210:1:28",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "/",
                                        "rightExpression": {
                                          "id": 7526,
                                          "name": "xn",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7359,
                                          "src": "25214:2:28",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "25210:6:28",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "25205:11:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 7529,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "25204:13:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">>",
                                "rightExpression": {
                                  "hexValue": "31",
                                  "id": 7530,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "25221:1:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "25204:18:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "25199:23:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 7533,
                            "nodeType": "ExpressionStatement",
                            "src": "25199:23:28"
                          },
                          {
                            "expression": {
                              "id": 7543,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 7534,
                                "name": "xn",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7359,
                                "src": "25309:2:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 7542,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "components": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 7539,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 7535,
                                        "name": "xn",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7359,
                                        "src": "25315:2:28",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "+",
                                      "rightExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 7538,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 7536,
                                          "name": "a",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7342,
                                          "src": "25320:1:28",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "/",
                                        "rightExpression": {
                                          "id": 7537,
                                          "name": "xn",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7359,
                                          "src": "25324:2:28",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "25320:6:28",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "25315:11:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 7540,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "25314:13:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">>",
                                "rightExpression": {
                                  "hexValue": "31",
                                  "id": 7541,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "25331:1:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "25314:18:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "25309:23:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 7544,
                            "nodeType": "ExpressionStatement",
                            "src": "25309:23:28"
                          },
                          {
                            "expression": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 7554,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 7545,
                                "name": "xn",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7359,
                                "src": "25698:2:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "-",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 7552,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 7548,
                                      "name": "xn",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7359,
                                      "src": "25719:2:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": ">",
                                    "rightExpression": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 7551,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 7549,
                                        "name": "a",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7342,
                                        "src": "25724:1:28",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "/",
                                      "rightExpression": {
                                        "id": 7550,
                                        "name": "xn",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7359,
                                        "src": "25728:2:28",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "25724:6:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "25719:11:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  ],
                                  "expression": {
                                    "id": 7546,
                                    "name": "SafeCast",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9779,
                                    "src": "25703:8:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_SafeCast_$9779_$",
                                      "typeString": "type(library SafeCast)"
                                    }
                                  },
                                  "id": 7547,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "25712:6:28",
                                  "memberName": "toUint",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 9778,
                                  "src": "25703:15:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_bool_$returns$_t_uint256_$",
                                    "typeString": "function (bool) pure returns (uint256)"
                                  }
                                },
                                "id": 7553,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "25703:28:28",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "25698:33:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "functionReturnParameters": 7346,
                            "id": 7555,
                            "nodeType": "Return",
                            "src": "25691:40:28"
                          }
                        ]
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7340,
                    "nodeType": "StructuredDocumentation",
                    "src": "20270:292:28",
                    "text": " @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded\n towards zero.\n This method is based on Newton's method for computing square roots; the algorithm is restricted to only\n using integer operations."
                  },
                  "id": 7558,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "sqrt",
                  "nameLocation": "20576:4:28",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 7343,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7342,
                        "mutability": "mutable",
                        "name": "a",
                        "nameLocation": "20589:1:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 7558,
                        "src": "20581:9:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7341,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "20581:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "20580:11:28"
                  },
                  "returnParameters": {
                    "id": 7346,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7345,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 7558,
                        "src": "20615:7:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7344,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "20615:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "20614:9:28"
                  },
                  "scope": 8014,
                  "src": "20567:5181:28",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7591,
                    "nodeType": "Block",
                    "src": "25921:171:28",
                    "statements": [
                      {
                        "id": 7590,
                        "nodeType": "UncheckedBlock",
                        "src": "25931:155:28",
                        "statements": [
                          {
                            "assignments": [
                              7570
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 7570,
                                "mutability": "mutable",
                                "name": "result",
                                "nameLocation": "25963:6:28",
                                "nodeType": "VariableDeclaration",
                                "scope": 7590,
                                "src": "25955:14:28",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 7569,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "25955:7:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 7574,
                            "initialValue": {
                              "arguments": [
                                {
                                  "id": 7572,
                                  "name": "a",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7561,
                                  "src": "25977:1:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 7571,
                                "name": "sqrt",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [
                                  7558,
                                  7592
                                ],
                                "referencedDeclaration": 7558,
                                "src": "25972:4:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (uint256) pure returns (uint256)"
                                }
                              },
                              "id": 7573,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "25972:7:28",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "25955:24:28"
                          },
                          {
                            "expression": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 7588,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 7575,
                                "name": "result",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7570,
                                "src": "26000:6:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    "id": 7586,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "arguments": [
                                        {
                                          "id": 7579,
                                          "name": "rounding",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7564,
                                          "src": "26042:8:28",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_enum$_Rounding_$6405",
                                            "typeString": "enum Math.Rounding"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_enum$_Rounding_$6405",
                                            "typeString": "enum Math.Rounding"
                                          }
                                        ],
                                        "id": 7578,
                                        "name": "unsignedRoundsUp",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8013,
                                        "src": "26025:16:28",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_pure$_t_enum$_Rounding_$6405_$returns$_t_bool_$",
                                          "typeString": "function (enum Math.Rounding) pure returns (bool)"
                                        }
                                      },
                                      "id": 7580,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "nameLocations": [],
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "26025:26:28",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "&&",
                                    "rightExpression": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 7585,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 7583,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 7581,
                                          "name": "result",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7570,
                                          "src": "26055:6:28",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "*",
                                        "rightExpression": {
                                          "id": 7582,
                                          "name": "result",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7570,
                                          "src": "26064:6:28",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "26055:15:28",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "<",
                                      "rightExpression": {
                                        "id": 7584,
                                        "name": "a",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7561,
                                        "src": "26073:1:28",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "26055:19:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "src": "26025:49:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  ],
                                  "expression": {
                                    "id": 7576,
                                    "name": "SafeCast",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9779,
                                    "src": "26009:8:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_SafeCast_$9779_$",
                                      "typeString": "type(library SafeCast)"
                                    }
                                  },
                                  "id": 7577,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "26018:6:28",
                                  "memberName": "toUint",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 9778,
                                  "src": "26009:15:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_bool_$returns$_t_uint256_$",
                                    "typeString": "function (bool) pure returns (uint256)"
                                  }
                                },
                                "id": 7587,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "26009:66:28",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "26000:75:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "functionReturnParameters": 7568,
                            "id": 7589,
                            "nodeType": "Return",
                            "src": "25993:82:28"
                          }
                        ]
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7559,
                    "nodeType": "StructuredDocumentation",
                    "src": "25754:86:28",
                    "text": " @dev Calculates sqrt(a), following the selected rounding direction."
                  },
                  "id": 7592,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "sqrt",
                  "nameLocation": "25854:4:28",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 7565,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7561,
                        "mutability": "mutable",
                        "name": "a",
                        "nameLocation": "25867:1:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 7592,
                        "src": "25859:9:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7560,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "25859:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7564,
                        "mutability": "mutable",
                        "name": "rounding",
                        "nameLocation": "25879:8:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 7592,
                        "src": "25870:17:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Rounding_$6405",
                          "typeString": "enum Math.Rounding"
                        },
                        "typeName": {
                          "id": 7563,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 7562,
                            "name": "Rounding",
                            "nameLocations": [
                              "25870:8:28"
                            ],
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 6405,
                            "src": "25870:8:28"
                          },
                          "referencedDeclaration": 6405,
                          "src": "25870:8:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Rounding_$6405",
                            "typeString": "enum Math.Rounding"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "25858:30:28"
                  },
                  "returnParameters": {
                    "id": 7568,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7567,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 7592,
                        "src": "25912:7:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7566,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "25912:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "25911:9:28"
                  },
                  "scope": 8014,
                  "src": "25845:247:28",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7682,
                    "nodeType": "Block",
                    "src": "26281:2334:28",
                    "statements": [
                      {
                        "expression": {
                          "id": 7609,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 7600,
                            "name": "r",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7598,
                            "src": "26363:1:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 7608,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "arguments": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 7605,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 7603,
                                    "name": "x",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7595,
                                    "src": "26383:1:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": ">",
                                  "rightExpression": {
                                    "hexValue": "30786666666666666666666666666666666666666666666666666666666666666666",
                                    "id": 7604,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "26387:34:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_340282366920938463463374607431768211455_by_1",
                                      "typeString": "int_const 3402...(31 digits omitted)...1455"
                                    },
                                    "value": "0xffffffffffffffffffffffffffffffff"
                                  },
                                  "src": "26383:38:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                ],
                                "expression": {
                                  "id": 7601,
                                  "name": "SafeCast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9779,
                                  "src": "26367:8:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_SafeCast_$9779_$",
                                    "typeString": "type(library SafeCast)"
                                  }
                                },
                                "id": 7602,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "26376:6:28",
                                "memberName": "toUint",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 9778,
                                "src": "26367:15:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_bool_$returns$_t_uint256_$",
                                  "typeString": "function (bool) pure returns (uint256)"
                                }
                              },
                              "id": 7606,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "26367:55:28",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<<",
                            "rightExpression": {
                              "hexValue": "37",
                              "id": 7607,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "26426:1:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_7_by_1",
                                "typeString": "int_const 7"
                              },
                              "value": "7"
                            },
                            "src": "26367:60:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "26363:64:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7610,
                        "nodeType": "ExpressionStatement",
                        "src": "26363:64:28"
                      },
                      {
                        "expression": {
                          "id": 7623,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 7611,
                            "name": "r",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7598,
                            "src": "26503:1:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "|=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 7622,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "arguments": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 7619,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "components": [
                                      {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 7616,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 7614,
                                          "name": "x",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7595,
                                          "src": "26525:1:28",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": ">>",
                                        "rightExpression": {
                                          "id": 7615,
                                          "name": "r",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7598,
                                          "src": "26530:1:28",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "26525:6:28",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "id": 7617,
                                    "isConstant": false,
                                    "isInlineArray": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "TupleExpression",
                                    "src": "26524:8:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": ">",
                                  "rightExpression": {
                                    "hexValue": "307866666666666666666666666666666666",
                                    "id": 7618,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "26535:18:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_18446744073709551615_by_1",
                                      "typeString": "int_const 18446744073709551615"
                                    },
                                    "value": "0xffffffffffffffff"
                                  },
                                  "src": "26524:29:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                ],
                                "expression": {
                                  "id": 7612,
                                  "name": "SafeCast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9779,
                                  "src": "26508:8:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_SafeCast_$9779_$",
                                    "typeString": "type(library SafeCast)"
                                  }
                                },
                                "id": 7613,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "26517:6:28",
                                "memberName": "toUint",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 9778,
                                "src": "26508:15:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_bool_$returns$_t_uint256_$",
                                  "typeString": "function (bool) pure returns (uint256)"
                                }
                              },
                              "id": 7620,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "26508:46:28",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<<",
                            "rightExpression": {
                              "hexValue": "36",
                              "id": 7621,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "26558:1:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_6_by_1",
                                "typeString": "int_const 6"
                              },
                              "value": "6"
                            },
                            "src": "26508:51:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "26503:56:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7624,
                        "nodeType": "ExpressionStatement",
                        "src": "26503:56:28"
                      },
                      {
                        "expression": {
                          "id": 7637,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 7625,
                            "name": "r",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7598,
                            "src": "26634:1:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "|=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 7636,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "arguments": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 7633,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "components": [
                                      {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 7630,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 7628,
                                          "name": "x",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7595,
                                          "src": "26656:1:28",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": ">>",
                                        "rightExpression": {
                                          "id": 7629,
                                          "name": "r",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7598,
                                          "src": "26661:1:28",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "26656:6:28",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "id": 7631,
                                    "isConstant": false,
                                    "isInlineArray": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "TupleExpression",
                                    "src": "26655:8:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": ">",
                                  "rightExpression": {
                                    "hexValue": "30786666666666666666",
                                    "id": 7632,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "26666:10:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_4294967295_by_1",
                                      "typeString": "int_const 4294967295"
                                    },
                                    "value": "0xffffffff"
                                  },
                                  "src": "26655:21:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                ],
                                "expression": {
                                  "id": 7626,
                                  "name": "SafeCast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9779,
                                  "src": "26639:8:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_SafeCast_$9779_$",
                                    "typeString": "type(library SafeCast)"
                                  }
                                },
                                "id": 7627,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "26648:6:28",
                                "memberName": "toUint",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 9778,
                                "src": "26639:15:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_bool_$returns$_t_uint256_$",
                                  "typeString": "function (bool) pure returns (uint256)"
                                }
                              },
                              "id": 7634,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "26639:38:28",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<<",
                            "rightExpression": {
                              "hexValue": "35",
                              "id": 7635,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "26681:1:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_5_by_1",
                                "typeString": "int_const 5"
                              },
                              "value": "5"
                            },
                            "src": "26639:43:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "26634:48:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7638,
                        "nodeType": "ExpressionStatement",
                        "src": "26634:48:28"
                      },
                      {
                        "expression": {
                          "id": 7651,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 7639,
                            "name": "r",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7598,
                            "src": "26757:1:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "|=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 7650,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "arguments": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 7647,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "components": [
                                      {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 7644,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 7642,
                                          "name": "x",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7595,
                                          "src": "26779:1:28",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": ">>",
                                        "rightExpression": {
                                          "id": 7643,
                                          "name": "r",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7598,
                                          "src": "26784:1:28",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "26779:6:28",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "id": 7645,
                                    "isConstant": false,
                                    "isInlineArray": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "TupleExpression",
                                    "src": "26778:8:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": ">",
                                  "rightExpression": {
                                    "hexValue": "307866666666",
                                    "id": 7646,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "26789:6:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_65535_by_1",
                                      "typeString": "int_const 65535"
                                    },
                                    "value": "0xffff"
                                  },
                                  "src": "26778:17:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                ],
                                "expression": {
                                  "id": 7640,
                                  "name": "SafeCast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9779,
                                  "src": "26762:8:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_SafeCast_$9779_$",
                                    "typeString": "type(library SafeCast)"
                                  }
                                },
                                "id": 7641,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "26771:6:28",
                                "memberName": "toUint",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 9778,
                                "src": "26762:15:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_bool_$returns$_t_uint256_$",
                                  "typeString": "function (bool) pure returns (uint256)"
                                }
                              },
                              "id": 7648,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "26762:34:28",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<<",
                            "rightExpression": {
                              "hexValue": "34",
                              "id": 7649,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "26800:1:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_4_by_1",
                                "typeString": "int_const 4"
                              },
                              "value": "4"
                            },
                            "src": "26762:39:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "26757:44:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7652,
                        "nodeType": "ExpressionStatement",
                        "src": "26757:44:28"
                      },
                      {
                        "expression": {
                          "id": 7665,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 7653,
                            "name": "r",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7598,
                            "src": "26874:1:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "|=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 7664,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "arguments": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 7661,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "components": [
                                      {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 7658,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 7656,
                                          "name": "x",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7595,
                                          "src": "26896:1:28",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": ">>",
                                        "rightExpression": {
                                          "id": 7657,
                                          "name": "r",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7598,
                                          "src": "26901:1:28",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "26896:6:28",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "id": 7659,
                                    "isConstant": false,
                                    "isInlineArray": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "TupleExpression",
                                    "src": "26895:8:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": ">",
                                  "rightExpression": {
                                    "hexValue": "30786666",
                                    "id": 7660,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "26906:4:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_255_by_1",
                                      "typeString": "int_const 255"
                                    },
                                    "value": "0xff"
                                  },
                                  "src": "26895:15:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                ],
                                "expression": {
                                  "id": 7654,
                                  "name": "SafeCast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9779,
                                  "src": "26879:8:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_SafeCast_$9779_$",
                                    "typeString": "type(library SafeCast)"
                                  }
                                },
                                "id": 7655,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "26888:6:28",
                                "memberName": "toUint",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 9778,
                                "src": "26879:15:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_bool_$returns$_t_uint256_$",
                                  "typeString": "function (bool) pure returns (uint256)"
                                }
                              },
                              "id": 7662,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "26879:32:28",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<<",
                            "rightExpression": {
                              "hexValue": "33",
                              "id": 7663,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "26915:1:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_3_by_1",
                                "typeString": "int_const 3"
                              },
                              "value": "3"
                            },
                            "src": "26879:37:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "26874:42:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7666,
                        "nodeType": "ExpressionStatement",
                        "src": "26874:42:28"
                      },
                      {
                        "expression": {
                          "id": 7679,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 7667,
                            "name": "r",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7598,
                            "src": "26988:1:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "|=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 7678,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "arguments": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 7675,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "components": [
                                      {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 7672,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 7670,
                                          "name": "x",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7595,
                                          "src": "27010:1:28",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": ">>",
                                        "rightExpression": {
                                          "id": 7671,
                                          "name": "r",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7598,
                                          "src": "27015:1:28",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "27010:6:28",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "id": 7673,
                                    "isConstant": false,
                                    "isInlineArray": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "TupleExpression",
                                    "src": "27009:8:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": ">",
                                  "rightExpression": {
                                    "hexValue": "307866",
                                    "id": 7674,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "27020:3:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_15_by_1",
                                      "typeString": "int_const 15"
                                    },
                                    "value": "0xf"
                                  },
                                  "src": "27009:14:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                ],
                                "expression": {
                                  "id": 7668,
                                  "name": "SafeCast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9779,
                                  "src": "26993:8:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_SafeCast_$9779_$",
                                    "typeString": "type(library SafeCast)"
                                  }
                                },
                                "id": 7669,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "27002:6:28",
                                "memberName": "toUint",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 9778,
                                "src": "26993:15:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_bool_$returns$_t_uint256_$",
                                  "typeString": "function (bool) pure returns (uint256)"
                                }
                              },
                              "id": 7676,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "26993:31:28",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<<",
                            "rightExpression": {
                              "hexValue": "32",
                              "id": 7677,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "27028:1:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "2"
                            },
                            "src": "26993:36:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "26988:41:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7680,
                        "nodeType": "ExpressionStatement",
                        "src": "26988:41:28"
                      },
                      {
                        "AST": {
                          "nativeSrc": "28490:119:28",
                          "nodeType": "YulBlock",
                          "src": "28490:119:28",
                          "statements": [
                            {
                              "nativeSrc": "28504:95:28",
                              "nodeType": "YulAssignment",
                              "src": "28504:95:28",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "r",
                                    "nativeSrc": "28512:1:28",
                                    "nodeType": "YulIdentifier",
                                    "src": "28512:1:28"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "r",
                                            "nativeSrc": "28524:1:28",
                                            "nodeType": "YulIdentifier",
                                            "src": "28524:1:28"
                                          },
                                          {
                                            "name": "x",
                                            "nativeSrc": "28527:1:28",
                                            "nodeType": "YulIdentifier",
                                            "src": "28527:1:28"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "shr",
                                          "nativeSrc": "28520:3:28",
                                          "nodeType": "YulIdentifier",
                                          "src": "28520:3:28"
                                        },
                                        "nativeSrc": "28520:9:28",
                                        "nodeType": "YulFunctionCall",
                                        "src": "28520:9:28"
                                      },
                                      {
                                        "kind": "number",
                                        "nativeSrc": "28531:66:28",
                                        "nodeType": "YulLiteral",
                                        "src": "28531:66:28",
                                        "type": "",
                                        "value": "0x0000010102020202030303030303030300000000000000000000000000000000"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "byte",
                                      "nativeSrc": "28515:4:28",
                                      "nodeType": "YulIdentifier",
                                      "src": "28515:4:28"
                                    },
                                    "nativeSrc": "28515:83:28",
                                    "nodeType": "YulFunctionCall",
                                    "src": "28515:83:28"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nativeSrc": "28509:2:28",
                                  "nodeType": "YulIdentifier",
                                  "src": "28509:2:28"
                                },
                                "nativeSrc": "28509:90:28",
                                "nodeType": "YulFunctionCall",
                                "src": "28509:90:28"
                              },
                              "variableNames": [
                                {
                                  "name": "r",
                                  "nativeSrc": "28504:1:28",
                                  "nodeType": "YulIdentifier",
                                  "src": "28504:1:28"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "paris",
                        "externalReferences": [
                          {
                            "declaration": 7598,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "28504:1:28",
                            "valueSize": 1
                          },
                          {
                            "declaration": 7598,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "28512:1:28",
                            "valueSize": 1
                          },
                          {
                            "declaration": 7598,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "28524:1:28",
                            "valueSize": 1
                          },
                          {
                            "declaration": 7595,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "28527:1:28",
                            "valueSize": 1
                          }
                        ],
                        "flags": [
                          "memory-safe"
                        ],
                        "id": 7681,
                        "nodeType": "InlineAssembly",
                        "src": "28465:144:28"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7593,
                    "nodeType": "StructuredDocumentation",
                    "src": "26098:119:28",
                    "text": " @dev Return the log in base 2 of a positive value rounded towards zero.\n Returns 0 if given 0."
                  },
                  "id": 7683,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "log2",
                  "nameLocation": "26231:4:28",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 7596,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7595,
                        "mutability": "mutable",
                        "name": "x",
                        "nameLocation": "26244:1:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 7683,
                        "src": "26236:9:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7594,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "26236:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "26235:11:28"
                  },
                  "returnParameters": {
                    "id": 7599,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7598,
                        "mutability": "mutable",
                        "name": "r",
                        "nameLocation": "26278:1:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 7683,
                        "src": "26270:9:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7597,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "26270:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "26269:11:28"
                  },
                  "scope": 8014,
                  "src": "26222:2393:28",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7716,
                    "nodeType": "Block",
                    "src": "28848:175:28",
                    "statements": [
                      {
                        "id": 7715,
                        "nodeType": "UncheckedBlock",
                        "src": "28858:159:28",
                        "statements": [
                          {
                            "assignments": [
                              7695
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 7695,
                                "mutability": "mutable",
                                "name": "result",
                                "nameLocation": "28890:6:28",
                                "nodeType": "VariableDeclaration",
                                "scope": 7715,
                                "src": "28882:14:28",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 7694,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "28882:7:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 7699,
                            "initialValue": {
                              "arguments": [
                                {
                                  "id": 7697,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7686,
                                  "src": "28904:5:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 7696,
                                "name": "log2",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [
                                  7683,
                                  7717
                                ],
                                "referencedDeclaration": 7683,
                                "src": "28899:4:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (uint256) pure returns (uint256)"
                                }
                              },
                              "id": 7698,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "28899:11:28",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "28882:28:28"
                          },
                          {
                            "expression": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 7713,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 7700,
                                "name": "result",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7695,
                                "src": "28931:6:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    "id": 7711,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "arguments": [
                                        {
                                          "id": 7704,
                                          "name": "rounding",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7689,
                                          "src": "28973:8:28",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_enum$_Rounding_$6405",
                                            "typeString": "enum Math.Rounding"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_enum$_Rounding_$6405",
                                            "typeString": "enum Math.Rounding"
                                          }
                                        ],
                                        "id": 7703,
                                        "name": "unsignedRoundsUp",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8013,
                                        "src": "28956:16:28",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_pure$_t_enum$_Rounding_$6405_$returns$_t_bool_$",
                                          "typeString": "function (enum Math.Rounding) pure returns (bool)"
                                        }
                                      },
                                      "id": 7705,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "nameLocations": [],
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "28956:26:28",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "&&",
                                    "rightExpression": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 7710,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 7708,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "hexValue": "31",
                                          "id": 7706,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "28986:1:28",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_1_by_1",
                                            "typeString": "int_const 1"
                                          },
                                          "value": "1"
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "<<",
                                        "rightExpression": {
                                          "id": 7707,
                                          "name": "result",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7695,
                                          "src": "28991:6:28",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "28986:11:28",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "<",
                                      "rightExpression": {
                                        "id": 7709,
                                        "name": "value",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7686,
                                        "src": "29000:5:28",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "28986:19:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "src": "28956:49:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  ],
                                  "expression": {
                                    "id": 7701,
                                    "name": "SafeCast",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9779,
                                    "src": "28940:8:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_SafeCast_$9779_$",
                                      "typeString": "type(library SafeCast)"
                                    }
                                  },
                                  "id": 7702,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "28949:6:28",
                                  "memberName": "toUint",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 9778,
                                  "src": "28940:15:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_bool_$returns$_t_uint256_$",
                                    "typeString": "function (bool) pure returns (uint256)"
                                  }
                                },
                                "id": 7712,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "28940:66:28",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "28931:75:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "functionReturnParameters": 7693,
                            "id": 7714,
                            "nodeType": "Return",
                            "src": "28924:82:28"
                          }
                        ]
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7684,
                    "nodeType": "StructuredDocumentation",
                    "src": "28621:142:28",
                    "text": " @dev Return the log in base 2, following the selected rounding direction, of a positive value.\n Returns 0 if given 0."
                  },
                  "id": 7717,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "log2",
                  "nameLocation": "28777:4:28",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 7690,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7686,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "28790:5:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 7717,
                        "src": "28782:13:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7685,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "28782:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7689,
                        "mutability": "mutable",
                        "name": "rounding",
                        "nameLocation": "28806:8:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 7717,
                        "src": "28797:17:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Rounding_$6405",
                          "typeString": "enum Math.Rounding"
                        },
                        "typeName": {
                          "id": 7688,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 7687,
                            "name": "Rounding",
                            "nameLocations": [
                              "28797:8:28"
                            ],
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 6405,
                            "src": "28797:8:28"
                          },
                          "referencedDeclaration": 6405,
                          "src": "28797:8:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Rounding_$6405",
                            "typeString": "enum Math.Rounding"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "28781:34:28"
                  },
                  "returnParameters": {
                    "id": 7693,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7692,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 7717,
                        "src": "28839:7:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7691,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "28839:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "28838:9:28"
                  },
                  "scope": 8014,
                  "src": "28768:255:28",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7845,
                    "nodeType": "Block",
                    "src": "29216:854:28",
                    "statements": [
                      {
                        "assignments": [
                          7726
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 7726,
                            "mutability": "mutable",
                            "name": "result",
                            "nameLocation": "29234:6:28",
                            "nodeType": "VariableDeclaration",
                            "scope": 7845,
                            "src": "29226:14:28",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 7725,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "29226:7:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 7728,
                        "initialValue": {
                          "hexValue": "30",
                          "id": 7727,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "29243:1:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "29226:18:28"
                      },
                      {
                        "id": 7842,
                        "nodeType": "UncheckedBlock",
                        "src": "29254:787:28",
                        "statements": [
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 7733,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 7729,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7720,
                                "src": "29282:5:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_rational_10000000000000000000000000000000000000000000000000000000000000000_by_1",
                                  "typeString": "int_const 1000...(57 digits omitted)...0000"
                                },
                                "id": 7732,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "3130",
                                  "id": 7730,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "29291:2:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_10_by_1",
                                    "typeString": "int_const 10"
                                  },
                                  "value": "10"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "**",
                                "rightExpression": {
                                  "hexValue": "3634",
                                  "id": 7731,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "29297:2:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_64_by_1",
                                    "typeString": "int_const 64"
                                  },
                                  "value": "64"
                                },
                                "src": "29291:8:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_10000000000000000000000000000000000000000000000000000000000000000_by_1",
                                  "typeString": "int_const 1000...(57 digits omitted)...0000"
                                }
                              },
                              "src": "29282:17:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 7745,
                            "nodeType": "IfStatement",
                            "src": "29278:103:28",
                            "trueBody": {
                              "id": 7744,
                              "nodeType": "Block",
                              "src": "29301:80:28",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 7738,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 7734,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7720,
                                      "src": "29319:5:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "/=",
                                    "rightHandSide": {
                                      "commonType": {
                                        "typeIdentifier": "t_rational_10000000000000000000000000000000000000000000000000000000000000000_by_1",
                                        "typeString": "int_const 1000...(57 digits omitted)...0000"
                                      },
                                      "id": 7737,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "hexValue": "3130",
                                        "id": 7735,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "29328:2:28",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_10_by_1",
                                          "typeString": "int_const 10"
                                        },
                                        "value": "10"
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "**",
                                      "rightExpression": {
                                        "hexValue": "3634",
                                        "id": 7736,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "29334:2:28",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_64_by_1",
                                          "typeString": "int_const 64"
                                        },
                                        "value": "64"
                                      },
                                      "src": "29328:8:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_10000000000000000000000000000000000000000000000000000000000000000_by_1",
                                        "typeString": "int_const 1000...(57 digits omitted)...0000"
                                      }
                                    },
                                    "src": "29319:17:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 7739,
                                  "nodeType": "ExpressionStatement",
                                  "src": "29319:17:28"
                                },
                                {
                                  "expression": {
                                    "id": 7742,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 7740,
                                      "name": "result",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7726,
                                      "src": "29354:6:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "+=",
                                    "rightHandSide": {
                                      "hexValue": "3634",
                                      "id": 7741,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "29364:2:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_64_by_1",
                                        "typeString": "int_const 64"
                                      },
                                      "value": "64"
                                    },
                                    "src": "29354:12:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 7743,
                                  "nodeType": "ExpressionStatement",
                                  "src": "29354:12:28"
                                }
                              ]
                            }
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 7750,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 7746,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7720,
                                "src": "29398:5:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_rational_100000000000000000000000000000000_by_1",
                                  "typeString": "int_const 1000...(25 digits omitted)...0000"
                                },
                                "id": 7749,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "3130",
                                  "id": 7747,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "29407:2:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_10_by_1",
                                    "typeString": "int_const 10"
                                  },
                                  "value": "10"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "**",
                                "rightExpression": {
                                  "hexValue": "3332",
                                  "id": 7748,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "29413:2:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_32_by_1",
                                    "typeString": "int_const 32"
                                  },
                                  "value": "32"
                                },
                                "src": "29407:8:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_100000000000000000000000000000000_by_1",
                                  "typeString": "int_const 1000...(25 digits omitted)...0000"
                                }
                              },
                              "src": "29398:17:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 7762,
                            "nodeType": "IfStatement",
                            "src": "29394:103:28",
                            "trueBody": {
                              "id": 7761,
                              "nodeType": "Block",
                              "src": "29417:80:28",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 7755,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 7751,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7720,
                                      "src": "29435:5:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "/=",
                                    "rightHandSide": {
                                      "commonType": {
                                        "typeIdentifier": "t_rational_100000000000000000000000000000000_by_1",
                                        "typeString": "int_const 1000...(25 digits omitted)...0000"
                                      },
                                      "id": 7754,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "hexValue": "3130",
                                        "id": 7752,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "29444:2:28",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_10_by_1",
                                          "typeString": "int_const 10"
                                        },
                                        "value": "10"
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "**",
                                      "rightExpression": {
                                        "hexValue": "3332",
                                        "id": 7753,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "29450:2:28",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_32_by_1",
                                          "typeString": "int_const 32"
                                        },
                                        "value": "32"
                                      },
                                      "src": "29444:8:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_100000000000000000000000000000000_by_1",
                                        "typeString": "int_const 1000...(25 digits omitted)...0000"
                                      }
                                    },
                                    "src": "29435:17:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 7756,
                                  "nodeType": "ExpressionStatement",
                                  "src": "29435:17:28"
                                },
                                {
                                  "expression": {
                                    "id": 7759,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 7757,
                                      "name": "result",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7726,
                                      "src": "29470:6:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "+=",
                                    "rightHandSide": {
                                      "hexValue": "3332",
                                      "id": 7758,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "29480:2:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_32_by_1",
                                        "typeString": "int_const 32"
                                      },
                                      "value": "32"
                                    },
                                    "src": "29470:12:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 7760,
                                  "nodeType": "ExpressionStatement",
                                  "src": "29470:12:28"
                                }
                              ]
                            }
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 7767,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 7763,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7720,
                                "src": "29514:5:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_rational_10000000000000000_by_1",
                                  "typeString": "int_const 10000000000000000"
                                },
                                "id": 7766,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "3130",
                                  "id": 7764,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "29523:2:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_10_by_1",
                                    "typeString": "int_const 10"
                                  },
                                  "value": "10"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "**",
                                "rightExpression": {
                                  "hexValue": "3136",
                                  "id": 7765,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "29529:2:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_16_by_1",
                                    "typeString": "int_const 16"
                                  },
                                  "value": "16"
                                },
                                "src": "29523:8:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_10000000000000000_by_1",
                                  "typeString": "int_const 10000000000000000"
                                }
                              },
                              "src": "29514:17:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 7779,
                            "nodeType": "IfStatement",
                            "src": "29510:103:28",
                            "trueBody": {
                              "id": 7778,
                              "nodeType": "Block",
                              "src": "29533:80:28",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 7772,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 7768,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7720,
                                      "src": "29551:5:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "/=",
                                    "rightHandSide": {
                                      "commonType": {
                                        "typeIdentifier": "t_rational_10000000000000000_by_1",
                                        "typeString": "int_const 10000000000000000"
                                      },
                                      "id": 7771,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "hexValue": "3130",
                                        "id": 7769,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "29560:2:28",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_10_by_1",
                                          "typeString": "int_const 10"
                                        },
                                        "value": "10"
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "**",
                                      "rightExpression": {
                                        "hexValue": "3136",
                                        "id": 7770,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "29566:2:28",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_16_by_1",
                                          "typeString": "int_const 16"
                                        },
                                        "value": "16"
                                      },
                                      "src": "29560:8:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_10000000000000000_by_1",
                                        "typeString": "int_const 10000000000000000"
                                      }
                                    },
                                    "src": "29551:17:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 7773,
                                  "nodeType": "ExpressionStatement",
                                  "src": "29551:17:28"
                                },
                                {
                                  "expression": {
                                    "id": 7776,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 7774,
                                      "name": "result",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7726,
                                      "src": "29586:6:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "+=",
                                    "rightHandSide": {
                                      "hexValue": "3136",
                                      "id": 7775,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "29596:2:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_16_by_1",
                                        "typeString": "int_const 16"
                                      },
                                      "value": "16"
                                    },
                                    "src": "29586:12:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 7777,
                                  "nodeType": "ExpressionStatement",
                                  "src": "29586:12:28"
                                }
                              ]
                            }
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 7784,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 7780,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7720,
                                "src": "29630:5:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_rational_100000000_by_1",
                                  "typeString": "int_const 100000000"
                                },
                                "id": 7783,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "3130",
                                  "id": 7781,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "29639:2:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_10_by_1",
                                    "typeString": "int_const 10"
                                  },
                                  "value": "10"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "**",
                                "rightExpression": {
                                  "hexValue": "38",
                                  "id": 7782,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "29645:1:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_8_by_1",
                                    "typeString": "int_const 8"
                                  },
                                  "value": "8"
                                },
                                "src": "29639:7:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_100000000_by_1",
                                  "typeString": "int_const 100000000"
                                }
                              },
                              "src": "29630:16:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 7796,
                            "nodeType": "IfStatement",
                            "src": "29626:100:28",
                            "trueBody": {
                              "id": 7795,
                              "nodeType": "Block",
                              "src": "29648:78:28",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 7789,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 7785,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7720,
                                      "src": "29666:5:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "/=",
                                    "rightHandSide": {
                                      "commonType": {
                                        "typeIdentifier": "t_rational_100000000_by_1",
                                        "typeString": "int_const 100000000"
                                      },
                                      "id": 7788,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "hexValue": "3130",
                                        "id": 7786,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "29675:2:28",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_10_by_1",
                                          "typeString": "int_const 10"
                                        },
                                        "value": "10"
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "**",
                                      "rightExpression": {
                                        "hexValue": "38",
                                        "id": 7787,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "29681:1:28",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_8_by_1",
                                          "typeString": "int_const 8"
                                        },
                                        "value": "8"
                                      },
                                      "src": "29675:7:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_100000000_by_1",
                                        "typeString": "int_const 100000000"
                                      }
                                    },
                                    "src": "29666:16:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 7790,
                                  "nodeType": "ExpressionStatement",
                                  "src": "29666:16:28"
                                },
                                {
                                  "expression": {
                                    "id": 7793,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 7791,
                                      "name": "result",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7726,
                                      "src": "29700:6:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "+=",
                                    "rightHandSide": {
                                      "hexValue": "38",
                                      "id": 7792,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "29710:1:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_8_by_1",
                                        "typeString": "int_const 8"
                                      },
                                      "value": "8"
                                    },
                                    "src": "29700:11:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 7794,
                                  "nodeType": "ExpressionStatement",
                                  "src": "29700:11:28"
                                }
                              ]
                            }
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 7801,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 7797,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7720,
                                "src": "29743:5:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_rational_10000_by_1",
                                  "typeString": "int_const 10000"
                                },
                                "id": 7800,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "3130",
                                  "id": 7798,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "29752:2:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_10_by_1",
                                    "typeString": "int_const 10"
                                  },
                                  "value": "10"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "**",
                                "rightExpression": {
                                  "hexValue": "34",
                                  "id": 7799,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "29758:1:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_4_by_1",
                                    "typeString": "int_const 4"
                                  },
                                  "value": "4"
                                },
                                "src": "29752:7:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_10000_by_1",
                                  "typeString": "int_const 10000"
                                }
                              },
                              "src": "29743:16:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 7813,
                            "nodeType": "IfStatement",
                            "src": "29739:100:28",
                            "trueBody": {
                              "id": 7812,
                              "nodeType": "Block",
                              "src": "29761:78:28",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 7806,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 7802,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7720,
                                      "src": "29779:5:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "/=",
                                    "rightHandSide": {
                                      "commonType": {
                                        "typeIdentifier": "t_rational_10000_by_1",
                                        "typeString": "int_const 10000"
                                      },
                                      "id": 7805,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "hexValue": "3130",
                                        "id": 7803,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "29788:2:28",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_10_by_1",
                                          "typeString": "int_const 10"
                                        },
                                        "value": "10"
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "**",
                                      "rightExpression": {
                                        "hexValue": "34",
                                        "id": 7804,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "29794:1:28",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_4_by_1",
                                          "typeString": "int_const 4"
                                        },
                                        "value": "4"
                                      },
                                      "src": "29788:7:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_10000_by_1",
                                        "typeString": "int_const 10000"
                                      }
                                    },
                                    "src": "29779:16:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 7807,
                                  "nodeType": "ExpressionStatement",
                                  "src": "29779:16:28"
                                },
                                {
                                  "expression": {
                                    "id": 7810,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 7808,
                                      "name": "result",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7726,
                                      "src": "29813:6:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "+=",
                                    "rightHandSide": {
                                      "hexValue": "34",
                                      "id": 7809,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "29823:1:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_4_by_1",
                                        "typeString": "int_const 4"
                                      },
                                      "value": "4"
                                    },
                                    "src": "29813:11:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 7811,
                                  "nodeType": "ExpressionStatement",
                                  "src": "29813:11:28"
                                }
                              ]
                            }
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 7818,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 7814,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7720,
                                "src": "29856:5:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_rational_100_by_1",
                                  "typeString": "int_const 100"
                                },
                                "id": 7817,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "3130",
                                  "id": 7815,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "29865:2:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_10_by_1",
                                    "typeString": "int_const 10"
                                  },
                                  "value": "10"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "**",
                                "rightExpression": {
                                  "hexValue": "32",
                                  "id": 7816,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "29871:1:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_2_by_1",
                                    "typeString": "int_const 2"
                                  },
                                  "value": "2"
                                },
                                "src": "29865:7:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_100_by_1",
                                  "typeString": "int_const 100"
                                }
                              },
                              "src": "29856:16:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 7830,
                            "nodeType": "IfStatement",
                            "src": "29852:100:28",
                            "trueBody": {
                              "id": 7829,
                              "nodeType": "Block",
                              "src": "29874:78:28",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 7823,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 7819,
                                      "name": "value",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7720,
                                      "src": "29892:5:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "/=",
                                    "rightHandSide": {
                                      "commonType": {
                                        "typeIdentifier": "t_rational_100_by_1",
                                        "typeString": "int_const 100"
                                      },
                                      "id": 7822,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "hexValue": "3130",
                                        "id": 7820,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "29901:2:28",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_10_by_1",
                                          "typeString": "int_const 10"
                                        },
                                        "value": "10"
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "**",
                                      "rightExpression": {
                                        "hexValue": "32",
                                        "id": 7821,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "29907:1:28",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_2_by_1",
                                          "typeString": "int_const 2"
                                        },
                                        "value": "2"
                                      },
                                      "src": "29901:7:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_100_by_1",
                                        "typeString": "int_const 100"
                                      }
                                    },
                                    "src": "29892:16:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 7824,
                                  "nodeType": "ExpressionStatement",
                                  "src": "29892:16:28"
                                },
                                {
                                  "expression": {
                                    "id": 7827,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 7825,
                                      "name": "result",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7726,
                                      "src": "29926:6:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "+=",
                                    "rightHandSide": {
                                      "hexValue": "32",
                                      "id": 7826,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "29936:1:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_2_by_1",
                                        "typeString": "int_const 2"
                                      },
                                      "value": "2"
                                    },
                                    "src": "29926:11:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 7828,
                                  "nodeType": "ExpressionStatement",
                                  "src": "29926:11:28"
                                }
                              ]
                            }
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 7835,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 7831,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7720,
                                "src": "29969:5:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_rational_10_by_1",
                                  "typeString": "int_const 10"
                                },
                                "id": 7834,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "hexValue": "3130",
                                  "id": 7832,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "29978:2:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_10_by_1",
                                    "typeString": "int_const 10"
                                  },
                                  "value": "10"
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "**",
                                "rightExpression": {
                                  "hexValue": "31",
                                  "id": 7833,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "29984:1:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "29978:7:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_10_by_1",
                                  "typeString": "int_const 10"
                                }
                              },
                              "src": "29969:16:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 7841,
                            "nodeType": "IfStatement",
                            "src": "29965:66:28",
                            "trueBody": {
                              "id": 7840,
                              "nodeType": "Block",
                              "src": "29987:44:28",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 7838,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 7836,
                                      "name": "result",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 7726,
                                      "src": "30005:6:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "+=",
                                    "rightHandSide": {
                                      "hexValue": "31",
                                      "id": 7837,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "30015:1:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "src": "30005:11:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 7839,
                                  "nodeType": "ExpressionStatement",
                                  "src": "30005:11:28"
                                }
                              ]
                            }
                          }
                        ]
                      },
                      {
                        "expression": {
                          "id": 7843,
                          "name": "result",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7726,
                          "src": "30057:6:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 7724,
                        "id": 7844,
                        "nodeType": "Return",
                        "src": "30050:13:28"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7718,
                    "nodeType": "StructuredDocumentation",
                    "src": "29029:120:28",
                    "text": " @dev Return the log in base 10 of a positive value rounded towards zero.\n Returns 0 if given 0."
                  },
                  "id": 7846,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "log10",
                  "nameLocation": "29163:5:28",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 7721,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7720,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "29177:5:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 7846,
                        "src": "29169:13:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7719,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "29169:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "29168:15:28"
                  },
                  "returnParameters": {
                    "id": 7724,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7723,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 7846,
                        "src": "29207:7:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7722,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "29207:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "29206:9:28"
                  },
                  "scope": 8014,
                  "src": "29154:916:28",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7879,
                    "nodeType": "Block",
                    "src": "30305:177:28",
                    "statements": [
                      {
                        "id": 7878,
                        "nodeType": "UncheckedBlock",
                        "src": "30315:161:28",
                        "statements": [
                          {
                            "assignments": [
                              7858
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 7858,
                                "mutability": "mutable",
                                "name": "result",
                                "nameLocation": "30347:6:28",
                                "nodeType": "VariableDeclaration",
                                "scope": 7878,
                                "src": "30339:14:28",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 7857,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "30339:7:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 7862,
                            "initialValue": {
                              "arguments": [
                                {
                                  "id": 7860,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7849,
                                  "src": "30362:5:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 7859,
                                "name": "log10",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [
                                  7846,
                                  7880
                                ],
                                "referencedDeclaration": 7846,
                                "src": "30356:5:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (uint256) pure returns (uint256)"
                                }
                              },
                              "id": 7861,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "30356:12:28",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "30339:29:28"
                          },
                          {
                            "expression": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 7876,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 7863,
                                "name": "result",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7858,
                                "src": "30389:6:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    "id": 7874,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "arguments": [
                                        {
                                          "id": 7867,
                                          "name": "rounding",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7852,
                                          "src": "30431:8:28",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_enum$_Rounding_$6405",
                                            "typeString": "enum Math.Rounding"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_enum$_Rounding_$6405",
                                            "typeString": "enum Math.Rounding"
                                          }
                                        ],
                                        "id": 7866,
                                        "name": "unsignedRoundsUp",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8013,
                                        "src": "30414:16:28",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_pure$_t_enum$_Rounding_$6405_$returns$_t_bool_$",
                                          "typeString": "function (enum Math.Rounding) pure returns (bool)"
                                        }
                                      },
                                      "id": 7868,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "nameLocations": [],
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "30414:26:28",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "&&",
                                    "rightExpression": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 7873,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 7871,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "hexValue": "3130",
                                          "id": 7869,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "30444:2:28",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_10_by_1",
                                            "typeString": "int_const 10"
                                          },
                                          "value": "10"
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "**",
                                        "rightExpression": {
                                          "id": 7870,
                                          "name": "result",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7858,
                                          "src": "30450:6:28",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "30444:12:28",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "<",
                                      "rightExpression": {
                                        "id": 7872,
                                        "name": "value",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7849,
                                        "src": "30459:5:28",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "30444:20:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "src": "30414:50:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  ],
                                  "expression": {
                                    "id": 7864,
                                    "name": "SafeCast",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9779,
                                    "src": "30398:8:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_SafeCast_$9779_$",
                                      "typeString": "type(library SafeCast)"
                                    }
                                  },
                                  "id": 7865,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "30407:6:28",
                                  "memberName": "toUint",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 9778,
                                  "src": "30398:15:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_bool_$returns$_t_uint256_$",
                                    "typeString": "function (bool) pure returns (uint256)"
                                  }
                                },
                                "id": 7875,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "30398:67:28",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "30389:76:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "functionReturnParameters": 7856,
                            "id": 7877,
                            "nodeType": "Return",
                            "src": "30382:83:28"
                          }
                        ]
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7847,
                    "nodeType": "StructuredDocumentation",
                    "src": "30076:143:28",
                    "text": " @dev Return the log in base 10, following the selected rounding direction, of a positive value.\n Returns 0 if given 0."
                  },
                  "id": 7880,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "log10",
                  "nameLocation": "30233:5:28",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 7853,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7849,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "30247:5:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 7880,
                        "src": "30239:13:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7848,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "30239:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7852,
                        "mutability": "mutable",
                        "name": "rounding",
                        "nameLocation": "30263:8:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 7880,
                        "src": "30254:17:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Rounding_$6405",
                          "typeString": "enum Math.Rounding"
                        },
                        "typeName": {
                          "id": 7851,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 7850,
                            "name": "Rounding",
                            "nameLocations": [
                              "30254:8:28"
                            ],
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 6405,
                            "src": "30254:8:28"
                          },
                          "referencedDeclaration": 6405,
                          "src": "30254:8:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Rounding_$6405",
                            "typeString": "enum Math.Rounding"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "30238:34:28"
                  },
                  "returnParameters": {
                    "id": 7856,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7855,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 7880,
                        "src": "30296:7:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7854,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "30296:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "30295:9:28"
                  },
                  "scope": 8014,
                  "src": "30224:258:28",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7956,
                    "nodeType": "Block",
                    "src": "30800:675:28",
                    "statements": [
                      {
                        "expression": {
                          "id": 7897,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 7888,
                            "name": "r",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7886,
                            "src": "30882:1:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 7896,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "arguments": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 7893,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 7891,
                                    "name": "x",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 7883,
                                    "src": "30902:1:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": ">",
                                  "rightExpression": {
                                    "hexValue": "30786666666666666666666666666666666666666666666666666666666666666666",
                                    "id": 7892,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "30906:34:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_340282366920938463463374607431768211455_by_1",
                                      "typeString": "int_const 3402...(31 digits omitted)...1455"
                                    },
                                    "value": "0xffffffffffffffffffffffffffffffff"
                                  },
                                  "src": "30902:38:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                ],
                                "expression": {
                                  "id": 7889,
                                  "name": "SafeCast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9779,
                                  "src": "30886:8:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_SafeCast_$9779_$",
                                    "typeString": "type(library SafeCast)"
                                  }
                                },
                                "id": 7890,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "30895:6:28",
                                "memberName": "toUint",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 9778,
                                "src": "30886:15:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_bool_$returns$_t_uint256_$",
                                  "typeString": "function (bool) pure returns (uint256)"
                                }
                              },
                              "id": 7894,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "30886:55:28",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<<",
                            "rightExpression": {
                              "hexValue": "37",
                              "id": 7895,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "30945:1:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_7_by_1",
                                "typeString": "int_const 7"
                              },
                              "value": "7"
                            },
                            "src": "30886:60:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "30882:64:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7898,
                        "nodeType": "ExpressionStatement",
                        "src": "30882:64:28"
                      },
                      {
                        "expression": {
                          "id": 7911,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 7899,
                            "name": "r",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7886,
                            "src": "31022:1:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "|=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 7910,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "arguments": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 7907,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "components": [
                                      {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 7904,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 7902,
                                          "name": "x",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7883,
                                          "src": "31044:1:28",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": ">>",
                                        "rightExpression": {
                                          "id": 7903,
                                          "name": "r",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7886,
                                          "src": "31049:1:28",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "31044:6:28",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "id": 7905,
                                    "isConstant": false,
                                    "isInlineArray": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "TupleExpression",
                                    "src": "31043:8:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": ">",
                                  "rightExpression": {
                                    "hexValue": "307866666666666666666666666666666666",
                                    "id": 7906,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "31054:18:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_18446744073709551615_by_1",
                                      "typeString": "int_const 18446744073709551615"
                                    },
                                    "value": "0xffffffffffffffff"
                                  },
                                  "src": "31043:29:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                ],
                                "expression": {
                                  "id": 7900,
                                  "name": "SafeCast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9779,
                                  "src": "31027:8:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_SafeCast_$9779_$",
                                    "typeString": "type(library SafeCast)"
                                  }
                                },
                                "id": 7901,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "31036:6:28",
                                "memberName": "toUint",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 9778,
                                "src": "31027:15:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_bool_$returns$_t_uint256_$",
                                  "typeString": "function (bool) pure returns (uint256)"
                                }
                              },
                              "id": 7908,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "31027:46:28",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<<",
                            "rightExpression": {
                              "hexValue": "36",
                              "id": 7909,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "31077:1:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_6_by_1",
                                "typeString": "int_const 6"
                              },
                              "value": "6"
                            },
                            "src": "31027:51:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "31022:56:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7912,
                        "nodeType": "ExpressionStatement",
                        "src": "31022:56:28"
                      },
                      {
                        "expression": {
                          "id": 7925,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 7913,
                            "name": "r",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7886,
                            "src": "31153:1:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "|=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 7924,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "arguments": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 7921,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "components": [
                                      {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 7918,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 7916,
                                          "name": "x",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7883,
                                          "src": "31175:1:28",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": ">>",
                                        "rightExpression": {
                                          "id": 7917,
                                          "name": "r",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7886,
                                          "src": "31180:1:28",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "31175:6:28",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "id": 7919,
                                    "isConstant": false,
                                    "isInlineArray": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "TupleExpression",
                                    "src": "31174:8:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": ">",
                                  "rightExpression": {
                                    "hexValue": "30786666666666666666",
                                    "id": 7920,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "31185:10:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_4294967295_by_1",
                                      "typeString": "int_const 4294967295"
                                    },
                                    "value": "0xffffffff"
                                  },
                                  "src": "31174:21:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                ],
                                "expression": {
                                  "id": 7914,
                                  "name": "SafeCast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9779,
                                  "src": "31158:8:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_SafeCast_$9779_$",
                                    "typeString": "type(library SafeCast)"
                                  }
                                },
                                "id": 7915,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "31167:6:28",
                                "memberName": "toUint",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 9778,
                                "src": "31158:15:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_bool_$returns$_t_uint256_$",
                                  "typeString": "function (bool) pure returns (uint256)"
                                }
                              },
                              "id": 7922,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "31158:38:28",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<<",
                            "rightExpression": {
                              "hexValue": "35",
                              "id": 7923,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "31200:1:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_5_by_1",
                                "typeString": "int_const 5"
                              },
                              "value": "5"
                            },
                            "src": "31158:43:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "31153:48:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7926,
                        "nodeType": "ExpressionStatement",
                        "src": "31153:48:28"
                      },
                      {
                        "expression": {
                          "id": 7939,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 7927,
                            "name": "r",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7886,
                            "src": "31276:1:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "|=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 7938,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "arguments": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 7935,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "components": [
                                      {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 7932,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 7930,
                                          "name": "x",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7883,
                                          "src": "31298:1:28",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": ">>",
                                        "rightExpression": {
                                          "id": 7931,
                                          "name": "r",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7886,
                                          "src": "31303:1:28",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "31298:6:28",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "id": 7933,
                                    "isConstant": false,
                                    "isInlineArray": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "TupleExpression",
                                    "src": "31297:8:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": ">",
                                  "rightExpression": {
                                    "hexValue": "307866666666",
                                    "id": 7934,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "31308:6:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_65535_by_1",
                                      "typeString": "int_const 65535"
                                    },
                                    "value": "0xffff"
                                  },
                                  "src": "31297:17:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                ],
                                "expression": {
                                  "id": 7928,
                                  "name": "SafeCast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9779,
                                  "src": "31281:8:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_SafeCast_$9779_$",
                                    "typeString": "type(library SafeCast)"
                                  }
                                },
                                "id": 7929,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "31290:6:28",
                                "memberName": "toUint",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 9778,
                                "src": "31281:15:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_bool_$returns$_t_uint256_$",
                                  "typeString": "function (bool) pure returns (uint256)"
                                }
                              },
                              "id": 7936,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "31281:34:28",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<<",
                            "rightExpression": {
                              "hexValue": "34",
                              "id": 7937,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "31319:1:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_4_by_1",
                                "typeString": "int_const 4"
                              },
                              "value": "4"
                            },
                            "src": "31281:39:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "31276:44:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 7940,
                        "nodeType": "ExpressionStatement",
                        "src": "31276:44:28"
                      },
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 7954,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "components": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 7943,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 7941,
                                  "name": "r",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7886,
                                  "src": "31426:1:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">>",
                                "rightExpression": {
                                  "hexValue": "33",
                                  "id": 7942,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "31431:1:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_3_by_1",
                                    "typeString": "int_const 3"
                                  },
                                  "value": "3"
                                },
                                "src": "31426:6:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 7944,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "31425:8:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "|",
                          "rightExpression": {
                            "arguments": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 7952,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "components": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 7949,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 7947,
                                        "name": "x",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7883,
                                        "src": "31453:1:28",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": ">>",
                                      "rightExpression": {
                                        "id": 7948,
                                        "name": "r",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7886,
                                        "src": "31458:1:28",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "31453:6:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 7950,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "31452:8:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">",
                                "rightExpression": {
                                  "hexValue": "30786666",
                                  "id": 7951,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "31463:4:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_255_by_1",
                                    "typeString": "int_const 255"
                                  },
                                  "value": "0xff"
                                },
                                "src": "31452:15:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "expression": {
                                "id": 7945,
                                "name": "SafeCast",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9779,
                                "src": "31436:8:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_SafeCast_$9779_$",
                                  "typeString": "type(library SafeCast)"
                                }
                              },
                              "id": 7946,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "31445:6:28",
                              "memberName": "toUint",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 9778,
                              "src": "31436:15:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bool_$returns$_t_uint256_$",
                                "typeString": "function (bool) pure returns (uint256)"
                              }
                            },
                            "id": 7953,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "31436:32:28",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "31425:43:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 7887,
                        "id": 7955,
                        "nodeType": "Return",
                        "src": "31418:50:28"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7881,
                    "nodeType": "StructuredDocumentation",
                    "src": "30488:246:28",
                    "text": " @dev Return the log in base 256 of a positive value rounded towards zero.\n Returns 0 if given 0.\n Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string."
                  },
                  "id": 7957,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "log256",
                  "nameLocation": "30748:6:28",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 7884,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7883,
                        "mutability": "mutable",
                        "name": "x",
                        "nameLocation": "30763:1:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 7957,
                        "src": "30755:9:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7882,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "30755:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "30754:11:28"
                  },
                  "returnParameters": {
                    "id": 7887,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7886,
                        "mutability": "mutable",
                        "name": "r",
                        "nameLocation": "30797:1:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 7957,
                        "src": "30789:9:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7885,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "30789:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "30788:11:28"
                  },
                  "scope": 8014,
                  "src": "30739:736:28",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 7993,
                    "nodeType": "Block",
                    "src": "31712:184:28",
                    "statements": [
                      {
                        "id": 7992,
                        "nodeType": "UncheckedBlock",
                        "src": "31722:168:28",
                        "statements": [
                          {
                            "assignments": [
                              7969
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 7969,
                                "mutability": "mutable",
                                "name": "result",
                                "nameLocation": "31754:6:28",
                                "nodeType": "VariableDeclaration",
                                "scope": 7992,
                                "src": "31746:14:28",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 7968,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "31746:7:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 7973,
                            "initialValue": {
                              "arguments": [
                                {
                                  "id": 7971,
                                  "name": "value",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7960,
                                  "src": "31770:5:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 7970,
                                "name": "log256",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [
                                  7957,
                                  7994
                                ],
                                "referencedDeclaration": 7957,
                                "src": "31763:6:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (uint256) pure returns (uint256)"
                                }
                              },
                              "id": 7972,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "31763:13:28",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "31746:30:28"
                          },
                          {
                            "expression": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 7990,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 7974,
                                "name": "result",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7969,
                                "src": "31797:6:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    "id": 7988,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "arguments": [
                                        {
                                          "id": 7978,
                                          "name": "rounding",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 7963,
                                          "src": "31839:8:28",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_enum$_Rounding_$6405",
                                            "typeString": "enum Math.Rounding"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_enum$_Rounding_$6405",
                                            "typeString": "enum Math.Rounding"
                                          }
                                        ],
                                        "id": 7977,
                                        "name": "unsignedRoundsUp",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 8013,
                                        "src": "31822:16:28",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_pure$_t_enum$_Rounding_$6405_$returns$_t_bool_$",
                                          "typeString": "function (enum Math.Rounding) pure returns (bool)"
                                        }
                                      },
                                      "id": 7979,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "nameLocations": [],
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "31822:26:28",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "&&",
                                    "rightExpression": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 7987,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 7985,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "hexValue": "31",
                                          "id": 7980,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "31852:1:28",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_1_by_1",
                                            "typeString": "int_const 1"
                                          },
                                          "value": "1"
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "<<",
                                        "rightExpression": {
                                          "components": [
                                            {
                                              "commonType": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              },
                                              "id": 7983,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "leftExpression": {
                                                "id": 7981,
                                                "name": "result",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 7969,
                                                "src": "31858:6:28",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              },
                                              "nodeType": "BinaryOperation",
                                              "operator": "<<",
                                              "rightExpression": {
                                                "hexValue": "33",
                                                "id": 7982,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "number",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "31868:1:28",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_rational_3_by_1",
                                                  "typeString": "int_const 3"
                                                },
                                                "value": "3"
                                              },
                                              "src": "31858:11:28",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            }
                                          ],
                                          "id": 7984,
                                          "isConstant": false,
                                          "isInlineArray": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "TupleExpression",
                                          "src": "31857:13:28",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "31852:18:28",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "<",
                                      "rightExpression": {
                                        "id": 7986,
                                        "name": "value",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 7960,
                                        "src": "31873:5:28",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "31852:26:28",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "src": "31822:56:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  ],
                                  "expression": {
                                    "id": 7975,
                                    "name": "SafeCast",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9779,
                                    "src": "31806:8:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_SafeCast_$9779_$",
                                      "typeString": "type(library SafeCast)"
                                    }
                                  },
                                  "id": 7976,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "31815:6:28",
                                  "memberName": "toUint",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 9778,
                                  "src": "31806:15:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_bool_$returns$_t_uint256_$",
                                    "typeString": "function (bool) pure returns (uint256)"
                                  }
                                },
                                "id": 7989,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "31806:73:28",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "31797:82:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "functionReturnParameters": 7967,
                            "id": 7991,
                            "nodeType": "Return",
                            "src": "31790:89:28"
                          }
                        ]
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7958,
                    "nodeType": "StructuredDocumentation",
                    "src": "31481:144:28",
                    "text": " @dev Return the log in base 256, following the selected rounding direction, of a positive value.\n Returns 0 if given 0."
                  },
                  "id": 7994,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "log256",
                  "nameLocation": "31639:6:28",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 7964,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7960,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "31654:5:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 7994,
                        "src": "31646:13:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7959,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "31646:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 7963,
                        "mutability": "mutable",
                        "name": "rounding",
                        "nameLocation": "31670:8:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 7994,
                        "src": "31661:17:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Rounding_$6405",
                          "typeString": "enum Math.Rounding"
                        },
                        "typeName": {
                          "id": 7962,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 7961,
                            "name": "Rounding",
                            "nameLocations": [
                              "31661:8:28"
                            ],
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 6405,
                            "src": "31661:8:28"
                          },
                          "referencedDeclaration": 6405,
                          "src": "31661:8:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Rounding_$6405",
                            "typeString": "enum Math.Rounding"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "31645:34:28"
                  },
                  "returnParameters": {
                    "id": 7967,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7966,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 7994,
                        "src": "31703:7:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 7965,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "31703:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "31702:9:28"
                  },
                  "scope": 8014,
                  "src": "31630:266:28",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 8012,
                    "nodeType": "Block",
                    "src": "32094:48:28",
                    "statements": [
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          },
                          "id": 8010,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            },
                            "id": 8008,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "arguments": [
                                {
                                  "id": 8005,
                                  "name": "rounding",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7998,
                                  "src": "32117:8:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_Rounding_$6405",
                                    "typeString": "enum Math.Rounding"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_enum$_Rounding_$6405",
                                    "typeString": "enum Math.Rounding"
                                  }
                                ],
                                "id": 8004,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "32111:5:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint8_$",
                                  "typeString": "type(uint8)"
                                },
                                "typeName": {
                                  "id": 8003,
                                  "name": "uint8",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "32111:5:28",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 8006,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "32111:15:28",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "%",
                            "rightExpression": {
                              "hexValue": "32",
                              "id": 8007,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "32129:1:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "2"
                            },
                            "src": "32111:19:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "hexValue": "31",
                            "id": 8009,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "32134:1:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "32111:24:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 8002,
                        "id": 8011,
                        "nodeType": "Return",
                        "src": "32104:31:28"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 7995,
                    "nodeType": "StructuredDocumentation",
                    "src": "31902:113:28",
                    "text": " @dev Returns whether a provided rounding mode is considered rounding up for unsigned integers."
                  },
                  "id": 8013,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "unsignedRoundsUp",
                  "nameLocation": "32029:16:28",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 7999,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7998,
                        "mutability": "mutable",
                        "name": "rounding",
                        "nameLocation": "32055:8:28",
                        "nodeType": "VariableDeclaration",
                        "scope": 8013,
                        "src": "32046:17:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Rounding_$6405",
                          "typeString": "enum Math.Rounding"
                        },
                        "typeName": {
                          "id": 7997,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 7996,
                            "name": "Rounding",
                            "nameLocations": [
                              "32046:8:28"
                            ],
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 6405,
                            "src": "32046:8:28"
                          },
                          "referencedDeclaration": 6405,
                          "src": "32046:8:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Rounding_$6405",
                            "typeString": "enum Math.Rounding"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "32045:19:28"
                  },
                  "returnParameters": {
                    "id": 8002,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8001,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 8013,
                        "src": "32088:4:28",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 8000,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "32088:4:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "32087:6:28"
                  },
                  "scope": 8014,
                  "src": "32020:122:28",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 8015,
              "src": "281:31863:28",
              "usedErrors": [],
              "usedEvents": []
            }
          ],
          "src": "103:32042:28"
        },
        "id": 28
      },
      "@openzeppelin/contracts/utils/math/SafeCast.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/utils/math/SafeCast.sol",
          "exportedSymbols": {
            "SafeCast": [
              9779
            ]
          },
          "id": 9780,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 8016,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".20"
              ],
              "nodeType": "PragmaDirective",
              "src": "192:24:29"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "canonicalName": "SafeCast",
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 8017,
                "nodeType": "StructuredDocumentation",
                "src": "218:550:29",
                "text": " @dev Wrappers over Solidity's uintXX/intXX/bool casting operators with added overflow\n checks.\n Downcasting from uint256/int256 in Solidity does not revert on overflow. This can\n easily result in undesired exploitation or bugs, since developers usually\n assume that overflows raise errors. `SafeCast` restores this intuition by\n reverting the transaction when such an operation overflows.\n Using this library instead of the unchecked operations eliminates an entire\n class of bugs, so it's recommended to use it always."
              },
              "fullyImplemented": true,
              "id": 9779,
              "linearizedBaseContracts": [
                9779
              ],
              "name": "SafeCast",
              "nameLocation": "777:8:29",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "documentation": {
                    "id": 8018,
                    "nodeType": "StructuredDocumentation",
                    "src": "792:68:29",
                    "text": " @dev Value doesn't fit in an uint of `bits` size."
                  },
                  "errorSelector": "6dfcc650",
                  "id": 8024,
                  "name": "SafeCastOverflowedUintDowncast",
                  "nameLocation": "871:30:29",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 8023,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8020,
                        "mutability": "mutable",
                        "name": "bits",
                        "nameLocation": "908:4:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 8024,
                        "src": "902:10:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 8019,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "902:5:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8022,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "922:5:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 8024,
                        "src": "914:13:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8021,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "914:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "901:27:29"
                  },
                  "src": "865:64:29"
                },
                {
                  "documentation": {
                    "id": 8025,
                    "nodeType": "StructuredDocumentation",
                    "src": "935:75:29",
                    "text": " @dev An int value doesn't fit in an uint of `bits` size."
                  },
                  "errorSelector": "a8ce4432",
                  "id": 8029,
                  "name": "SafeCastOverflowedIntToUint",
                  "nameLocation": "1021:27:29",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 8028,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8027,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "1056:5:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 8029,
                        "src": "1049:12:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 8026,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1049:6:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1048:14:29"
                  },
                  "src": "1015:48:29"
                },
                {
                  "documentation": {
                    "id": 8030,
                    "nodeType": "StructuredDocumentation",
                    "src": "1069:67:29",
                    "text": " @dev Value doesn't fit in an int of `bits` size."
                  },
                  "errorSelector": "327269a7",
                  "id": 8036,
                  "name": "SafeCastOverflowedIntDowncast",
                  "nameLocation": "1147:29:29",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 8035,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8032,
                        "mutability": "mutable",
                        "name": "bits",
                        "nameLocation": "1183:4:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 8036,
                        "src": "1177:10:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 8031,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "1177:5:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 8034,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "1196:5:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 8036,
                        "src": "1189:12:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 8033,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1189:6:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1176:26:29"
                  },
                  "src": "1141:62:29"
                },
                {
                  "documentation": {
                    "id": 8037,
                    "nodeType": "StructuredDocumentation",
                    "src": "1209:75:29",
                    "text": " @dev An uint value doesn't fit in an int of `bits` size."
                  },
                  "errorSelector": "24775e06",
                  "id": 8041,
                  "name": "SafeCastOverflowedUintToInt",
                  "nameLocation": "1295:27:29",
                  "nodeType": "ErrorDefinition",
                  "parameters": {
                    "id": 8040,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8039,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "1331:5:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 8041,
                        "src": "1323:13:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8038,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1323:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1322:15:29"
                  },
                  "src": "1289:49:29"
                },
                {
                  "body": {
                    "id": 8068,
                    "nodeType": "Block",
                    "src": "1695:152:29",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8055,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 8049,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8044,
                            "src": "1709:5:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 8052,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "1722:7:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint248_$",
                                    "typeString": "type(uint248)"
                                  },
                                  "typeName": {
                                    "id": 8051,
                                    "name": "uint248",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "1722:7:29",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_uint248_$",
                                    "typeString": "type(uint248)"
                                  }
                                ],
                                "id": 8050,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -27,
                                "src": "1717:4:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 8053,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1717:13:29",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_uint248",
                                "typeString": "type(uint248)"
                              }
                            },
                            "id": 8054,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberLocation": "1731:3:29",
                            "memberName": "max",
                            "nodeType": "MemberAccess",
                            "src": "1717:17:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint248",
                              "typeString": "uint248"
                            }
                          },
                          "src": "1709:25:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8062,
                        "nodeType": "IfStatement",
                        "src": "1705:105:29",
                        "trueBody": {
                          "id": 8061,
                          "nodeType": "Block",
                          "src": "1736:74:29",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "323438",
                                    "id": 8057,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "1788:3:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_248_by_1",
                                      "typeString": "int_const 248"
                                    },
                                    "value": "248"
                                  },
                                  {
                                    "id": 8058,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8044,
                                    "src": "1793:5:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_248_by_1",
                                      "typeString": "int_const 248"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 8056,
                                  "name": "SafeCastOverflowedUintDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8024,
                                  "src": "1757:30:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$",
                                    "typeString": "function (uint8,uint256) pure returns (error)"
                                  }
                                },
                                "id": 8059,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1757:42:29",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 8060,
                              "nodeType": "RevertStatement",
                              "src": "1750:49:29"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 8065,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8044,
                              "src": "1834:5:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 8064,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1826:7:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint248_$",
                              "typeString": "type(uint248)"
                            },
                            "typeName": {
                              "id": 8063,
                              "name": "uint248",
                              "nodeType": "ElementaryTypeName",
                              "src": "1826:7:29",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 8066,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1826:14:29",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint248",
                            "typeString": "uint248"
                          }
                        },
                        "functionReturnParameters": 8048,
                        "id": 8067,
                        "nodeType": "Return",
                        "src": "1819:21:29"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8042,
                    "nodeType": "StructuredDocumentation",
                    "src": "1344:280:29",
                    "text": " @dev Returns the downcasted uint248 from uint256, reverting on\n overflow (when the input is greater than largest uint248).\n Counterpart to Solidity's `uint248` operator.\n Requirements:\n - input must fit into 248 bits"
                  },
                  "id": 8069,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toUint248",
                  "nameLocation": "1638:9:29",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8045,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8044,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "1656:5:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 8069,
                        "src": "1648:13:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8043,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1648:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1647:15:29"
                  },
                  "returnParameters": {
                    "id": 8048,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8047,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 8069,
                        "src": "1686:7:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint248",
                          "typeString": "uint248"
                        },
                        "typeName": {
                          "id": 8046,
                          "name": "uint248",
                          "nodeType": "ElementaryTypeName",
                          "src": "1686:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint248",
                            "typeString": "uint248"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1685:9:29"
                  },
                  "scope": 9779,
                  "src": "1629:218:29",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 8096,
                    "nodeType": "Block",
                    "src": "2204:152:29",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8083,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 8077,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8072,
                            "src": "2218:5:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 8080,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "2231:7:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint240_$",
                                    "typeString": "type(uint240)"
                                  },
                                  "typeName": {
                                    "id": 8079,
                                    "name": "uint240",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "2231:7:29",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_uint240_$",
                                    "typeString": "type(uint240)"
                                  }
                                ],
                                "id": 8078,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -27,
                                "src": "2226:4:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 8081,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2226:13:29",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_uint240",
                                "typeString": "type(uint240)"
                              }
                            },
                            "id": 8082,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberLocation": "2240:3:29",
                            "memberName": "max",
                            "nodeType": "MemberAccess",
                            "src": "2226:17:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint240",
                              "typeString": "uint240"
                            }
                          },
                          "src": "2218:25:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8090,
                        "nodeType": "IfStatement",
                        "src": "2214:105:29",
                        "trueBody": {
                          "id": 8089,
                          "nodeType": "Block",
                          "src": "2245:74:29",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "323430",
                                    "id": 8085,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2297:3:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_240_by_1",
                                      "typeString": "int_const 240"
                                    },
                                    "value": "240"
                                  },
                                  {
                                    "id": 8086,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8072,
                                    "src": "2302:5:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_240_by_1",
                                      "typeString": "int_const 240"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 8084,
                                  "name": "SafeCastOverflowedUintDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8024,
                                  "src": "2266:30:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$",
                                    "typeString": "function (uint8,uint256) pure returns (error)"
                                  }
                                },
                                "id": 8087,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2266:42:29",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 8088,
                              "nodeType": "RevertStatement",
                              "src": "2259:49:29"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 8093,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8072,
                              "src": "2343:5:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 8092,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2335:7:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint240_$",
                              "typeString": "type(uint240)"
                            },
                            "typeName": {
                              "id": 8091,
                              "name": "uint240",
                              "nodeType": "ElementaryTypeName",
                              "src": "2335:7:29",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 8094,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2335:14:29",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint240",
                            "typeString": "uint240"
                          }
                        },
                        "functionReturnParameters": 8076,
                        "id": 8095,
                        "nodeType": "Return",
                        "src": "2328:21:29"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8070,
                    "nodeType": "StructuredDocumentation",
                    "src": "1853:280:29",
                    "text": " @dev Returns the downcasted uint240 from uint256, reverting on\n overflow (when the input is greater than largest uint240).\n Counterpart to Solidity's `uint240` operator.\n Requirements:\n - input must fit into 240 bits"
                  },
                  "id": 8097,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toUint240",
                  "nameLocation": "2147:9:29",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8073,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8072,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "2165:5:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 8097,
                        "src": "2157:13:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8071,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2157:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2156:15:29"
                  },
                  "returnParameters": {
                    "id": 8076,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8075,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 8097,
                        "src": "2195:7:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint240",
                          "typeString": "uint240"
                        },
                        "typeName": {
                          "id": 8074,
                          "name": "uint240",
                          "nodeType": "ElementaryTypeName",
                          "src": "2195:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint240",
                            "typeString": "uint240"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2194:9:29"
                  },
                  "scope": 9779,
                  "src": "2138:218:29",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 8124,
                    "nodeType": "Block",
                    "src": "2713:152:29",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8111,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 8105,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8100,
                            "src": "2727:5:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 8108,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "2740:7:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint232_$",
                                    "typeString": "type(uint232)"
                                  },
                                  "typeName": {
                                    "id": 8107,
                                    "name": "uint232",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "2740:7:29",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_uint232_$",
                                    "typeString": "type(uint232)"
                                  }
                                ],
                                "id": 8106,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -27,
                                "src": "2735:4:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 8109,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2735:13:29",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_uint232",
                                "typeString": "type(uint232)"
                              }
                            },
                            "id": 8110,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberLocation": "2749:3:29",
                            "memberName": "max",
                            "nodeType": "MemberAccess",
                            "src": "2735:17:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint232",
                              "typeString": "uint232"
                            }
                          },
                          "src": "2727:25:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8118,
                        "nodeType": "IfStatement",
                        "src": "2723:105:29",
                        "trueBody": {
                          "id": 8117,
                          "nodeType": "Block",
                          "src": "2754:74:29",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "323332",
                                    "id": 8113,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2806:3:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_232_by_1",
                                      "typeString": "int_const 232"
                                    },
                                    "value": "232"
                                  },
                                  {
                                    "id": 8114,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8100,
                                    "src": "2811:5:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_232_by_1",
                                      "typeString": "int_const 232"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 8112,
                                  "name": "SafeCastOverflowedUintDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8024,
                                  "src": "2775:30:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$",
                                    "typeString": "function (uint8,uint256) pure returns (error)"
                                  }
                                },
                                "id": 8115,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2775:42:29",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 8116,
                              "nodeType": "RevertStatement",
                              "src": "2768:49:29"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 8121,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8100,
                              "src": "2852:5:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 8120,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2844:7:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint232_$",
                              "typeString": "type(uint232)"
                            },
                            "typeName": {
                              "id": 8119,
                              "name": "uint232",
                              "nodeType": "ElementaryTypeName",
                              "src": "2844:7:29",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 8122,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2844:14:29",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint232",
                            "typeString": "uint232"
                          }
                        },
                        "functionReturnParameters": 8104,
                        "id": 8123,
                        "nodeType": "Return",
                        "src": "2837:21:29"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8098,
                    "nodeType": "StructuredDocumentation",
                    "src": "2362:280:29",
                    "text": " @dev Returns the downcasted uint232 from uint256, reverting on\n overflow (when the input is greater than largest uint232).\n Counterpart to Solidity's `uint232` operator.\n Requirements:\n - input must fit into 232 bits"
                  },
                  "id": 8125,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toUint232",
                  "nameLocation": "2656:9:29",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8101,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8100,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "2674:5:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 8125,
                        "src": "2666:13:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8099,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2666:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2665:15:29"
                  },
                  "returnParameters": {
                    "id": 8104,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8103,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 8125,
                        "src": "2704:7:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint232",
                          "typeString": "uint232"
                        },
                        "typeName": {
                          "id": 8102,
                          "name": "uint232",
                          "nodeType": "ElementaryTypeName",
                          "src": "2704:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint232",
                            "typeString": "uint232"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2703:9:29"
                  },
                  "scope": 9779,
                  "src": "2647:218:29",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 8152,
                    "nodeType": "Block",
                    "src": "3222:152:29",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8139,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 8133,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8128,
                            "src": "3236:5:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 8136,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "3249:7:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint224_$",
                                    "typeString": "type(uint224)"
                                  },
                                  "typeName": {
                                    "id": 8135,
                                    "name": "uint224",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "3249:7:29",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_uint224_$",
                                    "typeString": "type(uint224)"
                                  }
                                ],
                                "id": 8134,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -27,
                                "src": "3244:4:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 8137,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3244:13:29",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_uint224",
                                "typeString": "type(uint224)"
                              }
                            },
                            "id": 8138,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberLocation": "3258:3:29",
                            "memberName": "max",
                            "nodeType": "MemberAccess",
                            "src": "3244:17:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint224",
                              "typeString": "uint224"
                            }
                          },
                          "src": "3236:25:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8146,
                        "nodeType": "IfStatement",
                        "src": "3232:105:29",
                        "trueBody": {
                          "id": 8145,
                          "nodeType": "Block",
                          "src": "3263:74:29",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "323234",
                                    "id": 8141,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "3315:3:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_224_by_1",
                                      "typeString": "int_const 224"
                                    },
                                    "value": "224"
                                  },
                                  {
                                    "id": 8142,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8128,
                                    "src": "3320:5:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_224_by_1",
                                      "typeString": "int_const 224"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 8140,
                                  "name": "SafeCastOverflowedUintDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8024,
                                  "src": "3284:30:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$",
                                    "typeString": "function (uint8,uint256) pure returns (error)"
                                  }
                                },
                                "id": 8143,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3284:42:29",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 8144,
                              "nodeType": "RevertStatement",
                              "src": "3277:49:29"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 8149,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8128,
                              "src": "3361:5:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 8148,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3353:7:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint224_$",
                              "typeString": "type(uint224)"
                            },
                            "typeName": {
                              "id": 8147,
                              "name": "uint224",
                              "nodeType": "ElementaryTypeName",
                              "src": "3353:7:29",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 8150,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3353:14:29",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint224",
                            "typeString": "uint224"
                          }
                        },
                        "functionReturnParameters": 8132,
                        "id": 8151,
                        "nodeType": "Return",
                        "src": "3346:21:29"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8126,
                    "nodeType": "StructuredDocumentation",
                    "src": "2871:280:29",
                    "text": " @dev Returns the downcasted uint224 from uint256, reverting on\n overflow (when the input is greater than largest uint224).\n Counterpart to Solidity's `uint224` operator.\n Requirements:\n - input must fit into 224 bits"
                  },
                  "id": 8153,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toUint224",
                  "nameLocation": "3165:9:29",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8129,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8128,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "3183:5:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 8153,
                        "src": "3175:13:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8127,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3175:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3174:15:29"
                  },
                  "returnParameters": {
                    "id": 8132,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8131,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 8153,
                        "src": "3213:7:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint224",
                          "typeString": "uint224"
                        },
                        "typeName": {
                          "id": 8130,
                          "name": "uint224",
                          "nodeType": "ElementaryTypeName",
                          "src": "3213:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint224",
                            "typeString": "uint224"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3212:9:29"
                  },
                  "scope": 9779,
                  "src": "3156:218:29",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 8180,
                    "nodeType": "Block",
                    "src": "3731:152:29",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8167,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 8161,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8156,
                            "src": "3745:5:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 8164,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "3758:7:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint216_$",
                                    "typeString": "type(uint216)"
                                  },
                                  "typeName": {
                                    "id": 8163,
                                    "name": "uint216",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "3758:7:29",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_uint216_$",
                                    "typeString": "type(uint216)"
                                  }
                                ],
                                "id": 8162,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -27,
                                "src": "3753:4:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 8165,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3753:13:29",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_uint216",
                                "typeString": "type(uint216)"
                              }
                            },
                            "id": 8166,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberLocation": "3767:3:29",
                            "memberName": "max",
                            "nodeType": "MemberAccess",
                            "src": "3753:17:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint216",
                              "typeString": "uint216"
                            }
                          },
                          "src": "3745:25:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8174,
                        "nodeType": "IfStatement",
                        "src": "3741:105:29",
                        "trueBody": {
                          "id": 8173,
                          "nodeType": "Block",
                          "src": "3772:74:29",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "323136",
                                    "id": 8169,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "3824:3:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_216_by_1",
                                      "typeString": "int_const 216"
                                    },
                                    "value": "216"
                                  },
                                  {
                                    "id": 8170,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8156,
                                    "src": "3829:5:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_216_by_1",
                                      "typeString": "int_const 216"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 8168,
                                  "name": "SafeCastOverflowedUintDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8024,
                                  "src": "3793:30:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$",
                                    "typeString": "function (uint8,uint256) pure returns (error)"
                                  }
                                },
                                "id": 8171,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3793:42:29",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 8172,
                              "nodeType": "RevertStatement",
                              "src": "3786:49:29"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 8177,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8156,
                              "src": "3870:5:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 8176,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3862:7:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint216_$",
                              "typeString": "type(uint216)"
                            },
                            "typeName": {
                              "id": 8175,
                              "name": "uint216",
                              "nodeType": "ElementaryTypeName",
                              "src": "3862:7:29",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 8178,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3862:14:29",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint216",
                            "typeString": "uint216"
                          }
                        },
                        "functionReturnParameters": 8160,
                        "id": 8179,
                        "nodeType": "Return",
                        "src": "3855:21:29"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8154,
                    "nodeType": "StructuredDocumentation",
                    "src": "3380:280:29",
                    "text": " @dev Returns the downcasted uint216 from uint256, reverting on\n overflow (when the input is greater than largest uint216).\n Counterpart to Solidity's `uint216` operator.\n Requirements:\n - input must fit into 216 bits"
                  },
                  "id": 8181,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toUint216",
                  "nameLocation": "3674:9:29",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8157,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8156,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "3692:5:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 8181,
                        "src": "3684:13:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8155,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3684:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3683:15:29"
                  },
                  "returnParameters": {
                    "id": 8160,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8159,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 8181,
                        "src": "3722:7:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint216",
                          "typeString": "uint216"
                        },
                        "typeName": {
                          "id": 8158,
                          "name": "uint216",
                          "nodeType": "ElementaryTypeName",
                          "src": "3722:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint216",
                            "typeString": "uint216"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3721:9:29"
                  },
                  "scope": 9779,
                  "src": "3665:218:29",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 8208,
                    "nodeType": "Block",
                    "src": "4240:152:29",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8195,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 8189,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8184,
                            "src": "4254:5:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 8192,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "4267:7:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint208_$",
                                    "typeString": "type(uint208)"
                                  },
                                  "typeName": {
                                    "id": 8191,
                                    "name": "uint208",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "4267:7:29",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_uint208_$",
                                    "typeString": "type(uint208)"
                                  }
                                ],
                                "id": 8190,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -27,
                                "src": "4262:4:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 8193,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4262:13:29",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_uint208",
                                "typeString": "type(uint208)"
                              }
                            },
                            "id": 8194,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberLocation": "4276:3:29",
                            "memberName": "max",
                            "nodeType": "MemberAccess",
                            "src": "4262:17:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint208",
                              "typeString": "uint208"
                            }
                          },
                          "src": "4254:25:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8202,
                        "nodeType": "IfStatement",
                        "src": "4250:105:29",
                        "trueBody": {
                          "id": 8201,
                          "nodeType": "Block",
                          "src": "4281:74:29",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "323038",
                                    "id": 8197,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "4333:3:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_208_by_1",
                                      "typeString": "int_const 208"
                                    },
                                    "value": "208"
                                  },
                                  {
                                    "id": 8198,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8184,
                                    "src": "4338:5:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_208_by_1",
                                      "typeString": "int_const 208"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 8196,
                                  "name": "SafeCastOverflowedUintDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8024,
                                  "src": "4302:30:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$",
                                    "typeString": "function (uint8,uint256) pure returns (error)"
                                  }
                                },
                                "id": 8199,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4302:42:29",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 8200,
                              "nodeType": "RevertStatement",
                              "src": "4295:49:29"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 8205,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8184,
                              "src": "4379:5:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 8204,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "4371:7:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint208_$",
                              "typeString": "type(uint208)"
                            },
                            "typeName": {
                              "id": 8203,
                              "name": "uint208",
                              "nodeType": "ElementaryTypeName",
                              "src": "4371:7:29",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 8206,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4371:14:29",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint208",
                            "typeString": "uint208"
                          }
                        },
                        "functionReturnParameters": 8188,
                        "id": 8207,
                        "nodeType": "Return",
                        "src": "4364:21:29"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8182,
                    "nodeType": "StructuredDocumentation",
                    "src": "3889:280:29",
                    "text": " @dev Returns the downcasted uint208 from uint256, reverting on\n overflow (when the input is greater than largest uint208).\n Counterpart to Solidity's `uint208` operator.\n Requirements:\n - input must fit into 208 bits"
                  },
                  "id": 8209,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toUint208",
                  "nameLocation": "4183:9:29",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8185,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8184,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "4201:5:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 8209,
                        "src": "4193:13:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8183,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4193:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4192:15:29"
                  },
                  "returnParameters": {
                    "id": 8188,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8187,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 8209,
                        "src": "4231:7:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint208",
                          "typeString": "uint208"
                        },
                        "typeName": {
                          "id": 8186,
                          "name": "uint208",
                          "nodeType": "ElementaryTypeName",
                          "src": "4231:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint208",
                            "typeString": "uint208"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4230:9:29"
                  },
                  "scope": 9779,
                  "src": "4174:218:29",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 8236,
                    "nodeType": "Block",
                    "src": "4749:152:29",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8223,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 8217,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8212,
                            "src": "4763:5:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 8220,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "4776:7:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint200_$",
                                    "typeString": "type(uint200)"
                                  },
                                  "typeName": {
                                    "id": 8219,
                                    "name": "uint200",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "4776:7:29",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_uint200_$",
                                    "typeString": "type(uint200)"
                                  }
                                ],
                                "id": 8218,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -27,
                                "src": "4771:4:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 8221,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "4771:13:29",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_uint200",
                                "typeString": "type(uint200)"
                              }
                            },
                            "id": 8222,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberLocation": "4785:3:29",
                            "memberName": "max",
                            "nodeType": "MemberAccess",
                            "src": "4771:17:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint200",
                              "typeString": "uint200"
                            }
                          },
                          "src": "4763:25:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8230,
                        "nodeType": "IfStatement",
                        "src": "4759:105:29",
                        "trueBody": {
                          "id": 8229,
                          "nodeType": "Block",
                          "src": "4790:74:29",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "323030",
                                    "id": 8225,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "4842:3:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_200_by_1",
                                      "typeString": "int_const 200"
                                    },
                                    "value": "200"
                                  },
                                  {
                                    "id": 8226,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8212,
                                    "src": "4847:5:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_200_by_1",
                                      "typeString": "int_const 200"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 8224,
                                  "name": "SafeCastOverflowedUintDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8024,
                                  "src": "4811:30:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$",
                                    "typeString": "function (uint8,uint256) pure returns (error)"
                                  }
                                },
                                "id": 8227,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "4811:42:29",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 8228,
                              "nodeType": "RevertStatement",
                              "src": "4804:49:29"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 8233,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8212,
                              "src": "4888:5:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 8232,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "4880:7:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint200_$",
                              "typeString": "type(uint200)"
                            },
                            "typeName": {
                              "id": 8231,
                              "name": "uint200",
                              "nodeType": "ElementaryTypeName",
                              "src": "4880:7:29",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 8234,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4880:14:29",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint200",
                            "typeString": "uint200"
                          }
                        },
                        "functionReturnParameters": 8216,
                        "id": 8235,
                        "nodeType": "Return",
                        "src": "4873:21:29"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8210,
                    "nodeType": "StructuredDocumentation",
                    "src": "4398:280:29",
                    "text": " @dev Returns the downcasted uint200 from uint256, reverting on\n overflow (when the input is greater than largest uint200).\n Counterpart to Solidity's `uint200` operator.\n Requirements:\n - input must fit into 200 bits"
                  },
                  "id": 8237,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toUint200",
                  "nameLocation": "4692:9:29",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8213,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8212,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "4710:5:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 8237,
                        "src": "4702:13:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8211,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4702:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4701:15:29"
                  },
                  "returnParameters": {
                    "id": 8216,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8215,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 8237,
                        "src": "4740:7:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint200",
                          "typeString": "uint200"
                        },
                        "typeName": {
                          "id": 8214,
                          "name": "uint200",
                          "nodeType": "ElementaryTypeName",
                          "src": "4740:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint200",
                            "typeString": "uint200"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4739:9:29"
                  },
                  "scope": 9779,
                  "src": "4683:218:29",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 8264,
                    "nodeType": "Block",
                    "src": "5258:152:29",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8251,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 8245,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8240,
                            "src": "5272:5:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 8248,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "5285:7:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint192_$",
                                    "typeString": "type(uint192)"
                                  },
                                  "typeName": {
                                    "id": 8247,
                                    "name": "uint192",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "5285:7:29",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_uint192_$",
                                    "typeString": "type(uint192)"
                                  }
                                ],
                                "id": 8246,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -27,
                                "src": "5280:4:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 8249,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5280:13:29",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_uint192",
                                "typeString": "type(uint192)"
                              }
                            },
                            "id": 8250,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberLocation": "5294:3:29",
                            "memberName": "max",
                            "nodeType": "MemberAccess",
                            "src": "5280:17:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint192",
                              "typeString": "uint192"
                            }
                          },
                          "src": "5272:25:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8258,
                        "nodeType": "IfStatement",
                        "src": "5268:105:29",
                        "trueBody": {
                          "id": 8257,
                          "nodeType": "Block",
                          "src": "5299:74:29",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "313932",
                                    "id": 8253,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "5351:3:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_192_by_1",
                                      "typeString": "int_const 192"
                                    },
                                    "value": "192"
                                  },
                                  {
                                    "id": 8254,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8240,
                                    "src": "5356:5:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_192_by_1",
                                      "typeString": "int_const 192"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 8252,
                                  "name": "SafeCastOverflowedUintDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8024,
                                  "src": "5320:30:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$",
                                    "typeString": "function (uint8,uint256) pure returns (error)"
                                  }
                                },
                                "id": 8255,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "5320:42:29",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 8256,
                              "nodeType": "RevertStatement",
                              "src": "5313:49:29"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 8261,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8240,
                              "src": "5397:5:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 8260,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "5389:7:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint192_$",
                              "typeString": "type(uint192)"
                            },
                            "typeName": {
                              "id": 8259,
                              "name": "uint192",
                              "nodeType": "ElementaryTypeName",
                              "src": "5389:7:29",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 8262,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5389:14:29",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint192",
                            "typeString": "uint192"
                          }
                        },
                        "functionReturnParameters": 8244,
                        "id": 8263,
                        "nodeType": "Return",
                        "src": "5382:21:29"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8238,
                    "nodeType": "StructuredDocumentation",
                    "src": "4907:280:29",
                    "text": " @dev Returns the downcasted uint192 from uint256, reverting on\n overflow (when the input is greater than largest uint192).\n Counterpart to Solidity's `uint192` operator.\n Requirements:\n - input must fit into 192 bits"
                  },
                  "id": 8265,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toUint192",
                  "nameLocation": "5201:9:29",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8241,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8240,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "5219:5:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 8265,
                        "src": "5211:13:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8239,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5211:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5210:15:29"
                  },
                  "returnParameters": {
                    "id": 8244,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8243,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 8265,
                        "src": "5249:7:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint192",
                          "typeString": "uint192"
                        },
                        "typeName": {
                          "id": 8242,
                          "name": "uint192",
                          "nodeType": "ElementaryTypeName",
                          "src": "5249:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint192",
                            "typeString": "uint192"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5248:9:29"
                  },
                  "scope": 9779,
                  "src": "5192:218:29",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 8292,
                    "nodeType": "Block",
                    "src": "5767:152:29",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8279,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 8273,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8268,
                            "src": "5781:5:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 8276,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "5794:7:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint184_$",
                                    "typeString": "type(uint184)"
                                  },
                                  "typeName": {
                                    "id": 8275,
                                    "name": "uint184",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "5794:7:29",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_uint184_$",
                                    "typeString": "type(uint184)"
                                  }
                                ],
                                "id": 8274,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -27,
                                "src": "5789:4:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 8277,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5789:13:29",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_uint184",
                                "typeString": "type(uint184)"
                              }
                            },
                            "id": 8278,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberLocation": "5803:3:29",
                            "memberName": "max",
                            "nodeType": "MemberAccess",
                            "src": "5789:17:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint184",
                              "typeString": "uint184"
                            }
                          },
                          "src": "5781:25:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8286,
                        "nodeType": "IfStatement",
                        "src": "5777:105:29",
                        "trueBody": {
                          "id": 8285,
                          "nodeType": "Block",
                          "src": "5808:74:29",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "313834",
                                    "id": 8281,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "5860:3:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_184_by_1",
                                      "typeString": "int_const 184"
                                    },
                                    "value": "184"
                                  },
                                  {
                                    "id": 8282,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8268,
                                    "src": "5865:5:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_184_by_1",
                                      "typeString": "int_const 184"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 8280,
                                  "name": "SafeCastOverflowedUintDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8024,
                                  "src": "5829:30:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$",
                                    "typeString": "function (uint8,uint256) pure returns (error)"
                                  }
                                },
                                "id": 8283,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "5829:42:29",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 8284,
                              "nodeType": "RevertStatement",
                              "src": "5822:49:29"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 8289,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8268,
                              "src": "5906:5:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 8288,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "5898:7:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint184_$",
                              "typeString": "type(uint184)"
                            },
                            "typeName": {
                              "id": 8287,
                              "name": "uint184",
                              "nodeType": "ElementaryTypeName",
                              "src": "5898:7:29",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 8290,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5898:14:29",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint184",
                            "typeString": "uint184"
                          }
                        },
                        "functionReturnParameters": 8272,
                        "id": 8291,
                        "nodeType": "Return",
                        "src": "5891:21:29"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8266,
                    "nodeType": "StructuredDocumentation",
                    "src": "5416:280:29",
                    "text": " @dev Returns the downcasted uint184 from uint256, reverting on\n overflow (when the input is greater than largest uint184).\n Counterpart to Solidity's `uint184` operator.\n Requirements:\n - input must fit into 184 bits"
                  },
                  "id": 8293,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toUint184",
                  "nameLocation": "5710:9:29",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8269,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8268,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "5728:5:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 8293,
                        "src": "5720:13:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8267,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "5720:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5719:15:29"
                  },
                  "returnParameters": {
                    "id": 8272,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8271,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 8293,
                        "src": "5758:7:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint184",
                          "typeString": "uint184"
                        },
                        "typeName": {
                          "id": 8270,
                          "name": "uint184",
                          "nodeType": "ElementaryTypeName",
                          "src": "5758:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint184",
                            "typeString": "uint184"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "5757:9:29"
                  },
                  "scope": 9779,
                  "src": "5701:218:29",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 8320,
                    "nodeType": "Block",
                    "src": "6276:152:29",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8307,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 8301,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8296,
                            "src": "6290:5:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 8304,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "6303:7:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint176_$",
                                    "typeString": "type(uint176)"
                                  },
                                  "typeName": {
                                    "id": 8303,
                                    "name": "uint176",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "6303:7:29",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_uint176_$",
                                    "typeString": "type(uint176)"
                                  }
                                ],
                                "id": 8302,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -27,
                                "src": "6298:4:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 8305,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6298:13:29",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_uint176",
                                "typeString": "type(uint176)"
                              }
                            },
                            "id": 8306,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberLocation": "6312:3:29",
                            "memberName": "max",
                            "nodeType": "MemberAccess",
                            "src": "6298:17:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint176",
                              "typeString": "uint176"
                            }
                          },
                          "src": "6290:25:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8314,
                        "nodeType": "IfStatement",
                        "src": "6286:105:29",
                        "trueBody": {
                          "id": 8313,
                          "nodeType": "Block",
                          "src": "6317:74:29",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "313736",
                                    "id": 8309,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "6369:3:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_176_by_1",
                                      "typeString": "int_const 176"
                                    },
                                    "value": "176"
                                  },
                                  {
                                    "id": 8310,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8296,
                                    "src": "6374:5:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_176_by_1",
                                      "typeString": "int_const 176"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 8308,
                                  "name": "SafeCastOverflowedUintDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8024,
                                  "src": "6338:30:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$",
                                    "typeString": "function (uint8,uint256) pure returns (error)"
                                  }
                                },
                                "id": 8311,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "6338:42:29",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 8312,
                              "nodeType": "RevertStatement",
                              "src": "6331:49:29"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 8317,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8296,
                              "src": "6415:5:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 8316,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "6407:7:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint176_$",
                              "typeString": "type(uint176)"
                            },
                            "typeName": {
                              "id": 8315,
                              "name": "uint176",
                              "nodeType": "ElementaryTypeName",
                              "src": "6407:7:29",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 8318,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6407:14:29",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint176",
                            "typeString": "uint176"
                          }
                        },
                        "functionReturnParameters": 8300,
                        "id": 8319,
                        "nodeType": "Return",
                        "src": "6400:21:29"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8294,
                    "nodeType": "StructuredDocumentation",
                    "src": "5925:280:29",
                    "text": " @dev Returns the downcasted uint176 from uint256, reverting on\n overflow (when the input is greater than largest uint176).\n Counterpart to Solidity's `uint176` operator.\n Requirements:\n - input must fit into 176 bits"
                  },
                  "id": 8321,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toUint176",
                  "nameLocation": "6219:9:29",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8297,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8296,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "6237:5:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 8321,
                        "src": "6229:13:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8295,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6229:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6228:15:29"
                  },
                  "returnParameters": {
                    "id": 8300,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8299,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 8321,
                        "src": "6267:7:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint176",
                          "typeString": "uint176"
                        },
                        "typeName": {
                          "id": 8298,
                          "name": "uint176",
                          "nodeType": "ElementaryTypeName",
                          "src": "6267:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint176",
                            "typeString": "uint176"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6266:9:29"
                  },
                  "scope": 9779,
                  "src": "6210:218:29",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 8348,
                    "nodeType": "Block",
                    "src": "6785:152:29",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8335,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 8329,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8324,
                            "src": "6799:5:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 8332,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "6812:7:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint168_$",
                                    "typeString": "type(uint168)"
                                  },
                                  "typeName": {
                                    "id": 8331,
                                    "name": "uint168",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "6812:7:29",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_uint168_$",
                                    "typeString": "type(uint168)"
                                  }
                                ],
                                "id": 8330,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -27,
                                "src": "6807:4:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 8333,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6807:13:29",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_uint168",
                                "typeString": "type(uint168)"
                              }
                            },
                            "id": 8334,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberLocation": "6821:3:29",
                            "memberName": "max",
                            "nodeType": "MemberAccess",
                            "src": "6807:17:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint168",
                              "typeString": "uint168"
                            }
                          },
                          "src": "6799:25:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8342,
                        "nodeType": "IfStatement",
                        "src": "6795:105:29",
                        "trueBody": {
                          "id": 8341,
                          "nodeType": "Block",
                          "src": "6826:74:29",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "313638",
                                    "id": 8337,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "6878:3:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_168_by_1",
                                      "typeString": "int_const 168"
                                    },
                                    "value": "168"
                                  },
                                  {
                                    "id": 8338,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8324,
                                    "src": "6883:5:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_168_by_1",
                                      "typeString": "int_const 168"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 8336,
                                  "name": "SafeCastOverflowedUintDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8024,
                                  "src": "6847:30:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$",
                                    "typeString": "function (uint8,uint256) pure returns (error)"
                                  }
                                },
                                "id": 8339,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "6847:42:29",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 8340,
                              "nodeType": "RevertStatement",
                              "src": "6840:49:29"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 8345,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8324,
                              "src": "6924:5:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 8344,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "6916:7:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint168_$",
                              "typeString": "type(uint168)"
                            },
                            "typeName": {
                              "id": 8343,
                              "name": "uint168",
                              "nodeType": "ElementaryTypeName",
                              "src": "6916:7:29",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 8346,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6916:14:29",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint168",
                            "typeString": "uint168"
                          }
                        },
                        "functionReturnParameters": 8328,
                        "id": 8347,
                        "nodeType": "Return",
                        "src": "6909:21:29"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8322,
                    "nodeType": "StructuredDocumentation",
                    "src": "6434:280:29",
                    "text": " @dev Returns the downcasted uint168 from uint256, reverting on\n overflow (when the input is greater than largest uint168).\n Counterpart to Solidity's `uint168` operator.\n Requirements:\n - input must fit into 168 bits"
                  },
                  "id": 8349,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toUint168",
                  "nameLocation": "6728:9:29",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8325,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8324,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "6746:5:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 8349,
                        "src": "6738:13:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8323,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6738:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6737:15:29"
                  },
                  "returnParameters": {
                    "id": 8328,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8327,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 8349,
                        "src": "6776:7:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint168",
                          "typeString": "uint168"
                        },
                        "typeName": {
                          "id": 8326,
                          "name": "uint168",
                          "nodeType": "ElementaryTypeName",
                          "src": "6776:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint168",
                            "typeString": "uint168"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "6775:9:29"
                  },
                  "scope": 9779,
                  "src": "6719:218:29",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 8376,
                    "nodeType": "Block",
                    "src": "7294:152:29",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8363,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 8357,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8352,
                            "src": "7308:5:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 8360,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "7321:7:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint160_$",
                                    "typeString": "type(uint160)"
                                  },
                                  "typeName": {
                                    "id": 8359,
                                    "name": "uint160",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "7321:7:29",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_uint160_$",
                                    "typeString": "type(uint160)"
                                  }
                                ],
                                "id": 8358,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -27,
                                "src": "7316:4:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 8361,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "7316:13:29",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_uint160",
                                "typeString": "type(uint160)"
                              }
                            },
                            "id": 8362,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberLocation": "7330:3:29",
                            "memberName": "max",
                            "nodeType": "MemberAccess",
                            "src": "7316:17:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          },
                          "src": "7308:25:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8370,
                        "nodeType": "IfStatement",
                        "src": "7304:105:29",
                        "trueBody": {
                          "id": 8369,
                          "nodeType": "Block",
                          "src": "7335:74:29",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "313630",
                                    "id": 8365,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "7387:3:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_160_by_1",
                                      "typeString": "int_const 160"
                                    },
                                    "value": "160"
                                  },
                                  {
                                    "id": 8366,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8352,
                                    "src": "7392:5:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_160_by_1",
                                      "typeString": "int_const 160"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 8364,
                                  "name": "SafeCastOverflowedUintDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8024,
                                  "src": "7356:30:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$",
                                    "typeString": "function (uint8,uint256) pure returns (error)"
                                  }
                                },
                                "id": 8367,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7356:42:29",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 8368,
                              "nodeType": "RevertStatement",
                              "src": "7349:49:29"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 8373,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8352,
                              "src": "7433:5:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 8372,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "7425:7:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint160_$",
                              "typeString": "type(uint160)"
                            },
                            "typeName": {
                              "id": 8371,
                              "name": "uint160",
                              "nodeType": "ElementaryTypeName",
                              "src": "7425:7:29",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 8374,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7425:14:29",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "functionReturnParameters": 8356,
                        "id": 8375,
                        "nodeType": "Return",
                        "src": "7418:21:29"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8350,
                    "nodeType": "StructuredDocumentation",
                    "src": "6943:280:29",
                    "text": " @dev Returns the downcasted uint160 from uint256, reverting on\n overflow (when the input is greater than largest uint160).\n Counterpart to Solidity's `uint160` operator.\n Requirements:\n - input must fit into 160 bits"
                  },
                  "id": 8377,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toUint160",
                  "nameLocation": "7237:9:29",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8353,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8352,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "7255:5:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 8377,
                        "src": "7247:13:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8351,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7247:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7246:15:29"
                  },
                  "returnParameters": {
                    "id": 8356,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8355,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 8377,
                        "src": "7285:7:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        },
                        "typeName": {
                          "id": 8354,
                          "name": "uint160",
                          "nodeType": "ElementaryTypeName",
                          "src": "7285:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint160",
                            "typeString": "uint160"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7284:9:29"
                  },
                  "scope": 9779,
                  "src": "7228:218:29",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 8404,
                    "nodeType": "Block",
                    "src": "7803:152:29",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8391,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 8385,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8380,
                            "src": "7817:5:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 8388,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "7830:7:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint152_$",
                                    "typeString": "type(uint152)"
                                  },
                                  "typeName": {
                                    "id": 8387,
                                    "name": "uint152",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "7830:7:29",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_uint152_$",
                                    "typeString": "type(uint152)"
                                  }
                                ],
                                "id": 8386,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -27,
                                "src": "7825:4:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 8389,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "7825:13:29",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_uint152",
                                "typeString": "type(uint152)"
                              }
                            },
                            "id": 8390,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberLocation": "7839:3:29",
                            "memberName": "max",
                            "nodeType": "MemberAccess",
                            "src": "7825:17:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint152",
                              "typeString": "uint152"
                            }
                          },
                          "src": "7817:25:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8398,
                        "nodeType": "IfStatement",
                        "src": "7813:105:29",
                        "trueBody": {
                          "id": 8397,
                          "nodeType": "Block",
                          "src": "7844:74:29",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "313532",
                                    "id": 8393,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "7896:3:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_152_by_1",
                                      "typeString": "int_const 152"
                                    },
                                    "value": "152"
                                  },
                                  {
                                    "id": 8394,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8380,
                                    "src": "7901:5:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_152_by_1",
                                      "typeString": "int_const 152"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 8392,
                                  "name": "SafeCastOverflowedUintDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8024,
                                  "src": "7865:30:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$",
                                    "typeString": "function (uint8,uint256) pure returns (error)"
                                  }
                                },
                                "id": 8395,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7865:42:29",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 8396,
                              "nodeType": "RevertStatement",
                              "src": "7858:49:29"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 8401,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8380,
                              "src": "7942:5:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 8400,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "7934:7:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint152_$",
                              "typeString": "type(uint152)"
                            },
                            "typeName": {
                              "id": 8399,
                              "name": "uint152",
                              "nodeType": "ElementaryTypeName",
                              "src": "7934:7:29",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 8402,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7934:14:29",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint152",
                            "typeString": "uint152"
                          }
                        },
                        "functionReturnParameters": 8384,
                        "id": 8403,
                        "nodeType": "Return",
                        "src": "7927:21:29"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8378,
                    "nodeType": "StructuredDocumentation",
                    "src": "7452:280:29",
                    "text": " @dev Returns the downcasted uint152 from uint256, reverting on\n overflow (when the input is greater than largest uint152).\n Counterpart to Solidity's `uint152` operator.\n Requirements:\n - input must fit into 152 bits"
                  },
                  "id": 8405,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toUint152",
                  "nameLocation": "7746:9:29",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8381,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8380,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "7764:5:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 8405,
                        "src": "7756:13:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8379,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7756:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7755:15:29"
                  },
                  "returnParameters": {
                    "id": 8384,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8383,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 8405,
                        "src": "7794:7:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint152",
                          "typeString": "uint152"
                        },
                        "typeName": {
                          "id": 8382,
                          "name": "uint152",
                          "nodeType": "ElementaryTypeName",
                          "src": "7794:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint152",
                            "typeString": "uint152"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "7793:9:29"
                  },
                  "scope": 9779,
                  "src": "7737:218:29",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 8432,
                    "nodeType": "Block",
                    "src": "8312:152:29",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8419,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 8413,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8408,
                            "src": "8326:5:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 8416,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "8339:7:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint144_$",
                                    "typeString": "type(uint144)"
                                  },
                                  "typeName": {
                                    "id": 8415,
                                    "name": "uint144",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "8339:7:29",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_uint144_$",
                                    "typeString": "type(uint144)"
                                  }
                                ],
                                "id": 8414,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -27,
                                "src": "8334:4:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 8417,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "8334:13:29",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_uint144",
                                "typeString": "type(uint144)"
                              }
                            },
                            "id": 8418,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberLocation": "8348:3:29",
                            "memberName": "max",
                            "nodeType": "MemberAccess",
                            "src": "8334:17:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint144",
                              "typeString": "uint144"
                            }
                          },
                          "src": "8326:25:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8426,
                        "nodeType": "IfStatement",
                        "src": "8322:105:29",
                        "trueBody": {
                          "id": 8425,
                          "nodeType": "Block",
                          "src": "8353:74:29",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "313434",
                                    "id": 8421,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "8405:3:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_144_by_1",
                                      "typeString": "int_const 144"
                                    },
                                    "value": "144"
                                  },
                                  {
                                    "id": 8422,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8408,
                                    "src": "8410:5:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_144_by_1",
                                      "typeString": "int_const 144"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 8420,
                                  "name": "SafeCastOverflowedUintDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8024,
                                  "src": "8374:30:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$",
                                    "typeString": "function (uint8,uint256) pure returns (error)"
                                  }
                                },
                                "id": 8423,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "8374:42:29",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 8424,
                              "nodeType": "RevertStatement",
                              "src": "8367:49:29"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 8429,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8408,
                              "src": "8451:5:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 8428,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "8443:7:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint144_$",
                              "typeString": "type(uint144)"
                            },
                            "typeName": {
                              "id": 8427,
                              "name": "uint144",
                              "nodeType": "ElementaryTypeName",
                              "src": "8443:7:29",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 8430,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8443:14:29",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint144",
                            "typeString": "uint144"
                          }
                        },
                        "functionReturnParameters": 8412,
                        "id": 8431,
                        "nodeType": "Return",
                        "src": "8436:21:29"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8406,
                    "nodeType": "StructuredDocumentation",
                    "src": "7961:280:29",
                    "text": " @dev Returns the downcasted uint144 from uint256, reverting on\n overflow (when the input is greater than largest uint144).\n Counterpart to Solidity's `uint144` operator.\n Requirements:\n - input must fit into 144 bits"
                  },
                  "id": 8433,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toUint144",
                  "nameLocation": "8255:9:29",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8409,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8408,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "8273:5:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 8433,
                        "src": "8265:13:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8407,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8265:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8264:15:29"
                  },
                  "returnParameters": {
                    "id": 8412,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8411,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 8433,
                        "src": "8303:7:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint144",
                          "typeString": "uint144"
                        },
                        "typeName": {
                          "id": 8410,
                          "name": "uint144",
                          "nodeType": "ElementaryTypeName",
                          "src": "8303:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint144",
                            "typeString": "uint144"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8302:9:29"
                  },
                  "scope": 9779,
                  "src": "8246:218:29",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 8460,
                    "nodeType": "Block",
                    "src": "8821:152:29",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8447,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 8441,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8436,
                            "src": "8835:5:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 8444,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "8848:7:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint136_$",
                                    "typeString": "type(uint136)"
                                  },
                                  "typeName": {
                                    "id": 8443,
                                    "name": "uint136",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "8848:7:29",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_uint136_$",
                                    "typeString": "type(uint136)"
                                  }
                                ],
                                "id": 8442,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -27,
                                "src": "8843:4:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 8445,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "8843:13:29",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_uint136",
                                "typeString": "type(uint136)"
                              }
                            },
                            "id": 8446,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberLocation": "8857:3:29",
                            "memberName": "max",
                            "nodeType": "MemberAccess",
                            "src": "8843:17:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint136",
                              "typeString": "uint136"
                            }
                          },
                          "src": "8835:25:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8454,
                        "nodeType": "IfStatement",
                        "src": "8831:105:29",
                        "trueBody": {
                          "id": 8453,
                          "nodeType": "Block",
                          "src": "8862:74:29",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "313336",
                                    "id": 8449,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "8914:3:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_136_by_1",
                                      "typeString": "int_const 136"
                                    },
                                    "value": "136"
                                  },
                                  {
                                    "id": 8450,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8436,
                                    "src": "8919:5:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_136_by_1",
                                      "typeString": "int_const 136"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 8448,
                                  "name": "SafeCastOverflowedUintDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8024,
                                  "src": "8883:30:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$",
                                    "typeString": "function (uint8,uint256) pure returns (error)"
                                  }
                                },
                                "id": 8451,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "8883:42:29",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 8452,
                              "nodeType": "RevertStatement",
                              "src": "8876:49:29"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 8457,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8436,
                              "src": "8960:5:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 8456,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "8952:7:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint136_$",
                              "typeString": "type(uint136)"
                            },
                            "typeName": {
                              "id": 8455,
                              "name": "uint136",
                              "nodeType": "ElementaryTypeName",
                              "src": "8952:7:29",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 8458,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8952:14:29",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint136",
                            "typeString": "uint136"
                          }
                        },
                        "functionReturnParameters": 8440,
                        "id": 8459,
                        "nodeType": "Return",
                        "src": "8945:21:29"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8434,
                    "nodeType": "StructuredDocumentation",
                    "src": "8470:280:29",
                    "text": " @dev Returns the downcasted uint136 from uint256, reverting on\n overflow (when the input is greater than largest uint136).\n Counterpart to Solidity's `uint136` operator.\n Requirements:\n - input must fit into 136 bits"
                  },
                  "id": 8461,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toUint136",
                  "nameLocation": "8764:9:29",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8437,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8436,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "8782:5:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 8461,
                        "src": "8774:13:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8435,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "8774:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8773:15:29"
                  },
                  "returnParameters": {
                    "id": 8440,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8439,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 8461,
                        "src": "8812:7:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint136",
                          "typeString": "uint136"
                        },
                        "typeName": {
                          "id": 8438,
                          "name": "uint136",
                          "nodeType": "ElementaryTypeName",
                          "src": "8812:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint136",
                            "typeString": "uint136"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "8811:9:29"
                  },
                  "scope": 9779,
                  "src": "8755:218:29",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 8488,
                    "nodeType": "Block",
                    "src": "9330:152:29",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8475,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 8469,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8464,
                            "src": "9344:5:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 8472,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "9357:7:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint128_$",
                                    "typeString": "type(uint128)"
                                  },
                                  "typeName": {
                                    "id": 8471,
                                    "name": "uint128",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "9357:7:29",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_uint128_$",
                                    "typeString": "type(uint128)"
                                  }
                                ],
                                "id": 8470,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -27,
                                "src": "9352:4:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 8473,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "9352:13:29",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_uint128",
                                "typeString": "type(uint128)"
                              }
                            },
                            "id": 8474,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberLocation": "9366:3:29",
                            "memberName": "max",
                            "nodeType": "MemberAccess",
                            "src": "9352:17:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "src": "9344:25:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8482,
                        "nodeType": "IfStatement",
                        "src": "9340:105:29",
                        "trueBody": {
                          "id": 8481,
                          "nodeType": "Block",
                          "src": "9371:74:29",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "313238",
                                    "id": 8477,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "9423:3:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_128_by_1",
                                      "typeString": "int_const 128"
                                    },
                                    "value": "128"
                                  },
                                  {
                                    "id": 8478,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8464,
                                    "src": "9428:5:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_128_by_1",
                                      "typeString": "int_const 128"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 8476,
                                  "name": "SafeCastOverflowedUintDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8024,
                                  "src": "9392:30:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$",
                                    "typeString": "function (uint8,uint256) pure returns (error)"
                                  }
                                },
                                "id": 8479,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "9392:42:29",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 8480,
                              "nodeType": "RevertStatement",
                              "src": "9385:49:29"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 8485,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8464,
                              "src": "9469:5:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 8484,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "9461:7:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint128_$",
                              "typeString": "type(uint128)"
                            },
                            "typeName": {
                              "id": 8483,
                              "name": "uint128",
                              "nodeType": "ElementaryTypeName",
                              "src": "9461:7:29",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 8486,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9461:14:29",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "functionReturnParameters": 8468,
                        "id": 8487,
                        "nodeType": "Return",
                        "src": "9454:21:29"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8462,
                    "nodeType": "StructuredDocumentation",
                    "src": "8979:280:29",
                    "text": " @dev Returns the downcasted uint128 from uint256, reverting on\n overflow (when the input is greater than largest uint128).\n Counterpart to Solidity's `uint128` operator.\n Requirements:\n - input must fit into 128 bits"
                  },
                  "id": 8489,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toUint128",
                  "nameLocation": "9273:9:29",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8465,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8464,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "9291:5:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 8489,
                        "src": "9283:13:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8463,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9283:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "9282:15:29"
                  },
                  "returnParameters": {
                    "id": 8468,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8467,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 8489,
                        "src": "9321:7:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "typeName": {
                          "id": 8466,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "9321:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "9320:9:29"
                  },
                  "scope": 9779,
                  "src": "9264:218:29",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 8516,
                    "nodeType": "Block",
                    "src": "9839:152:29",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8503,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 8497,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8492,
                            "src": "9853:5:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 8500,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "9866:7:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint120_$",
                                    "typeString": "type(uint120)"
                                  },
                                  "typeName": {
                                    "id": 8499,
                                    "name": "uint120",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "9866:7:29",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_uint120_$",
                                    "typeString": "type(uint120)"
                                  }
                                ],
                                "id": 8498,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -27,
                                "src": "9861:4:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 8501,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "9861:13:29",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_uint120",
                                "typeString": "type(uint120)"
                              }
                            },
                            "id": 8502,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberLocation": "9875:3:29",
                            "memberName": "max",
                            "nodeType": "MemberAccess",
                            "src": "9861:17:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint120",
                              "typeString": "uint120"
                            }
                          },
                          "src": "9853:25:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8510,
                        "nodeType": "IfStatement",
                        "src": "9849:105:29",
                        "trueBody": {
                          "id": 8509,
                          "nodeType": "Block",
                          "src": "9880:74:29",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "313230",
                                    "id": 8505,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "9932:3:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_120_by_1",
                                      "typeString": "int_const 120"
                                    },
                                    "value": "120"
                                  },
                                  {
                                    "id": 8506,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8492,
                                    "src": "9937:5:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_120_by_1",
                                      "typeString": "int_const 120"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 8504,
                                  "name": "SafeCastOverflowedUintDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8024,
                                  "src": "9901:30:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$",
                                    "typeString": "function (uint8,uint256) pure returns (error)"
                                  }
                                },
                                "id": 8507,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "9901:42:29",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 8508,
                              "nodeType": "RevertStatement",
                              "src": "9894:49:29"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 8513,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8492,
                              "src": "9978:5:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 8512,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "9970:7:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint120_$",
                              "typeString": "type(uint120)"
                            },
                            "typeName": {
                              "id": 8511,
                              "name": "uint120",
                              "nodeType": "ElementaryTypeName",
                              "src": "9970:7:29",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 8514,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9970:14:29",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint120",
                            "typeString": "uint120"
                          }
                        },
                        "functionReturnParameters": 8496,
                        "id": 8515,
                        "nodeType": "Return",
                        "src": "9963:21:29"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8490,
                    "nodeType": "StructuredDocumentation",
                    "src": "9488:280:29",
                    "text": " @dev Returns the downcasted uint120 from uint256, reverting on\n overflow (when the input is greater than largest uint120).\n Counterpart to Solidity's `uint120` operator.\n Requirements:\n - input must fit into 120 bits"
                  },
                  "id": 8517,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toUint120",
                  "nameLocation": "9782:9:29",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8493,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8492,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "9800:5:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 8517,
                        "src": "9792:13:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8491,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "9792:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "9791:15:29"
                  },
                  "returnParameters": {
                    "id": 8496,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8495,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 8517,
                        "src": "9830:7:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint120",
                          "typeString": "uint120"
                        },
                        "typeName": {
                          "id": 8494,
                          "name": "uint120",
                          "nodeType": "ElementaryTypeName",
                          "src": "9830:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint120",
                            "typeString": "uint120"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "9829:9:29"
                  },
                  "scope": 9779,
                  "src": "9773:218:29",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 8544,
                    "nodeType": "Block",
                    "src": "10348:152:29",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8531,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 8525,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8520,
                            "src": "10362:5:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 8528,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "10375:7:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint112_$",
                                    "typeString": "type(uint112)"
                                  },
                                  "typeName": {
                                    "id": 8527,
                                    "name": "uint112",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "10375:7:29",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_uint112_$",
                                    "typeString": "type(uint112)"
                                  }
                                ],
                                "id": 8526,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -27,
                                "src": "10370:4:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 8529,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "10370:13:29",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_uint112",
                                "typeString": "type(uint112)"
                              }
                            },
                            "id": 8530,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberLocation": "10384:3:29",
                            "memberName": "max",
                            "nodeType": "MemberAccess",
                            "src": "10370:17:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint112",
                              "typeString": "uint112"
                            }
                          },
                          "src": "10362:25:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8538,
                        "nodeType": "IfStatement",
                        "src": "10358:105:29",
                        "trueBody": {
                          "id": 8537,
                          "nodeType": "Block",
                          "src": "10389:74:29",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "313132",
                                    "id": 8533,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "10441:3:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_112_by_1",
                                      "typeString": "int_const 112"
                                    },
                                    "value": "112"
                                  },
                                  {
                                    "id": 8534,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8520,
                                    "src": "10446:5:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_112_by_1",
                                      "typeString": "int_const 112"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 8532,
                                  "name": "SafeCastOverflowedUintDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8024,
                                  "src": "10410:30:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$",
                                    "typeString": "function (uint8,uint256) pure returns (error)"
                                  }
                                },
                                "id": 8535,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "10410:42:29",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 8536,
                              "nodeType": "RevertStatement",
                              "src": "10403:49:29"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 8541,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8520,
                              "src": "10487:5:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 8540,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "10479:7:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint112_$",
                              "typeString": "type(uint112)"
                            },
                            "typeName": {
                              "id": 8539,
                              "name": "uint112",
                              "nodeType": "ElementaryTypeName",
                              "src": "10479:7:29",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 8542,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10479:14:29",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint112",
                            "typeString": "uint112"
                          }
                        },
                        "functionReturnParameters": 8524,
                        "id": 8543,
                        "nodeType": "Return",
                        "src": "10472:21:29"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8518,
                    "nodeType": "StructuredDocumentation",
                    "src": "9997:280:29",
                    "text": " @dev Returns the downcasted uint112 from uint256, reverting on\n overflow (when the input is greater than largest uint112).\n Counterpart to Solidity's `uint112` operator.\n Requirements:\n - input must fit into 112 bits"
                  },
                  "id": 8545,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toUint112",
                  "nameLocation": "10291:9:29",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8521,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8520,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "10309:5:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 8545,
                        "src": "10301:13:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8519,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "10301:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "10300:15:29"
                  },
                  "returnParameters": {
                    "id": 8524,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8523,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 8545,
                        "src": "10339:7:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint112",
                          "typeString": "uint112"
                        },
                        "typeName": {
                          "id": 8522,
                          "name": "uint112",
                          "nodeType": "ElementaryTypeName",
                          "src": "10339:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint112",
                            "typeString": "uint112"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "10338:9:29"
                  },
                  "scope": 9779,
                  "src": "10282:218:29",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 8572,
                    "nodeType": "Block",
                    "src": "10857:152:29",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8559,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 8553,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8548,
                            "src": "10871:5:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 8556,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "10884:7:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint104_$",
                                    "typeString": "type(uint104)"
                                  },
                                  "typeName": {
                                    "id": 8555,
                                    "name": "uint104",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "10884:7:29",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_uint104_$",
                                    "typeString": "type(uint104)"
                                  }
                                ],
                                "id": 8554,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -27,
                                "src": "10879:4:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 8557,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "10879:13:29",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_uint104",
                                "typeString": "type(uint104)"
                              }
                            },
                            "id": 8558,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberLocation": "10893:3:29",
                            "memberName": "max",
                            "nodeType": "MemberAccess",
                            "src": "10879:17:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint104",
                              "typeString": "uint104"
                            }
                          },
                          "src": "10871:25:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8566,
                        "nodeType": "IfStatement",
                        "src": "10867:105:29",
                        "trueBody": {
                          "id": 8565,
                          "nodeType": "Block",
                          "src": "10898:74:29",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "313034",
                                    "id": 8561,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "10950:3:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_104_by_1",
                                      "typeString": "int_const 104"
                                    },
                                    "value": "104"
                                  },
                                  {
                                    "id": 8562,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8548,
                                    "src": "10955:5:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_104_by_1",
                                      "typeString": "int_const 104"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 8560,
                                  "name": "SafeCastOverflowedUintDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8024,
                                  "src": "10919:30:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$",
                                    "typeString": "function (uint8,uint256) pure returns (error)"
                                  }
                                },
                                "id": 8563,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "10919:42:29",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 8564,
                              "nodeType": "RevertStatement",
                              "src": "10912:49:29"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 8569,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8548,
                              "src": "10996:5:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 8568,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "10988:7:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint104_$",
                              "typeString": "type(uint104)"
                            },
                            "typeName": {
                              "id": 8567,
                              "name": "uint104",
                              "nodeType": "ElementaryTypeName",
                              "src": "10988:7:29",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 8570,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10988:14:29",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint104",
                            "typeString": "uint104"
                          }
                        },
                        "functionReturnParameters": 8552,
                        "id": 8571,
                        "nodeType": "Return",
                        "src": "10981:21:29"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8546,
                    "nodeType": "StructuredDocumentation",
                    "src": "10506:280:29",
                    "text": " @dev Returns the downcasted uint104 from uint256, reverting on\n overflow (when the input is greater than largest uint104).\n Counterpart to Solidity's `uint104` operator.\n Requirements:\n - input must fit into 104 bits"
                  },
                  "id": 8573,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toUint104",
                  "nameLocation": "10800:9:29",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8549,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8548,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "10818:5:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 8573,
                        "src": "10810:13:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8547,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "10810:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "10809:15:29"
                  },
                  "returnParameters": {
                    "id": 8552,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8551,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 8573,
                        "src": "10848:7:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint104",
                          "typeString": "uint104"
                        },
                        "typeName": {
                          "id": 8550,
                          "name": "uint104",
                          "nodeType": "ElementaryTypeName",
                          "src": "10848:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint104",
                            "typeString": "uint104"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "10847:9:29"
                  },
                  "scope": 9779,
                  "src": "10791:218:29",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 8600,
                    "nodeType": "Block",
                    "src": "11360:149:29",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8587,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 8581,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8576,
                            "src": "11374:5:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 8584,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "11387:6:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint96_$",
                                    "typeString": "type(uint96)"
                                  },
                                  "typeName": {
                                    "id": 8583,
                                    "name": "uint96",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "11387:6:29",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_uint96_$",
                                    "typeString": "type(uint96)"
                                  }
                                ],
                                "id": 8582,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -27,
                                "src": "11382:4:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 8585,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "11382:12:29",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_uint96",
                                "typeString": "type(uint96)"
                              }
                            },
                            "id": 8586,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberLocation": "11395:3:29",
                            "memberName": "max",
                            "nodeType": "MemberAccess",
                            "src": "11382:16:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint96",
                              "typeString": "uint96"
                            }
                          },
                          "src": "11374:24:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8594,
                        "nodeType": "IfStatement",
                        "src": "11370:103:29",
                        "trueBody": {
                          "id": 8593,
                          "nodeType": "Block",
                          "src": "11400:73:29",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "3936",
                                    "id": 8589,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "11452:2:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_96_by_1",
                                      "typeString": "int_const 96"
                                    },
                                    "value": "96"
                                  },
                                  {
                                    "id": 8590,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8576,
                                    "src": "11456:5:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_96_by_1",
                                      "typeString": "int_const 96"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 8588,
                                  "name": "SafeCastOverflowedUintDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8024,
                                  "src": "11421:30:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$",
                                    "typeString": "function (uint8,uint256) pure returns (error)"
                                  }
                                },
                                "id": 8591,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "11421:41:29",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 8592,
                              "nodeType": "RevertStatement",
                              "src": "11414:48:29"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 8597,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8576,
                              "src": "11496:5:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 8596,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "11489:6:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint96_$",
                              "typeString": "type(uint96)"
                            },
                            "typeName": {
                              "id": 8595,
                              "name": "uint96",
                              "nodeType": "ElementaryTypeName",
                              "src": "11489:6:29",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 8598,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11489:13:29",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint96",
                            "typeString": "uint96"
                          }
                        },
                        "functionReturnParameters": 8580,
                        "id": 8599,
                        "nodeType": "Return",
                        "src": "11482:20:29"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8574,
                    "nodeType": "StructuredDocumentation",
                    "src": "11015:276:29",
                    "text": " @dev Returns the downcasted uint96 from uint256, reverting on\n overflow (when the input is greater than largest uint96).\n Counterpart to Solidity's `uint96` operator.\n Requirements:\n - input must fit into 96 bits"
                  },
                  "id": 8601,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toUint96",
                  "nameLocation": "11305:8:29",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8577,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8576,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "11322:5:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 8601,
                        "src": "11314:13:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8575,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11314:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "11313:15:29"
                  },
                  "returnParameters": {
                    "id": 8580,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8579,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 8601,
                        "src": "11352:6:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint96",
                          "typeString": "uint96"
                        },
                        "typeName": {
                          "id": 8578,
                          "name": "uint96",
                          "nodeType": "ElementaryTypeName",
                          "src": "11352:6:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint96",
                            "typeString": "uint96"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "11351:8:29"
                  },
                  "scope": 9779,
                  "src": "11296:213:29",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 8628,
                    "nodeType": "Block",
                    "src": "11860:149:29",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8615,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 8609,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8604,
                            "src": "11874:5:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 8612,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "11887:6:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint88_$",
                                    "typeString": "type(uint88)"
                                  },
                                  "typeName": {
                                    "id": 8611,
                                    "name": "uint88",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "11887:6:29",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_uint88_$",
                                    "typeString": "type(uint88)"
                                  }
                                ],
                                "id": 8610,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -27,
                                "src": "11882:4:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 8613,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "11882:12:29",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_uint88",
                                "typeString": "type(uint88)"
                              }
                            },
                            "id": 8614,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberLocation": "11895:3:29",
                            "memberName": "max",
                            "nodeType": "MemberAccess",
                            "src": "11882:16:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint88",
                              "typeString": "uint88"
                            }
                          },
                          "src": "11874:24:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8622,
                        "nodeType": "IfStatement",
                        "src": "11870:103:29",
                        "trueBody": {
                          "id": 8621,
                          "nodeType": "Block",
                          "src": "11900:73:29",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "3838",
                                    "id": 8617,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "11952:2:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_88_by_1",
                                      "typeString": "int_const 88"
                                    },
                                    "value": "88"
                                  },
                                  {
                                    "id": 8618,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8604,
                                    "src": "11956:5:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_88_by_1",
                                      "typeString": "int_const 88"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 8616,
                                  "name": "SafeCastOverflowedUintDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8024,
                                  "src": "11921:30:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$",
                                    "typeString": "function (uint8,uint256) pure returns (error)"
                                  }
                                },
                                "id": 8619,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "11921:41:29",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 8620,
                              "nodeType": "RevertStatement",
                              "src": "11914:48:29"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 8625,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8604,
                              "src": "11996:5:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 8624,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "11989:6:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint88_$",
                              "typeString": "type(uint88)"
                            },
                            "typeName": {
                              "id": 8623,
                              "name": "uint88",
                              "nodeType": "ElementaryTypeName",
                              "src": "11989:6:29",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 8626,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11989:13:29",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint88",
                            "typeString": "uint88"
                          }
                        },
                        "functionReturnParameters": 8608,
                        "id": 8627,
                        "nodeType": "Return",
                        "src": "11982:20:29"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8602,
                    "nodeType": "StructuredDocumentation",
                    "src": "11515:276:29",
                    "text": " @dev Returns the downcasted uint88 from uint256, reverting on\n overflow (when the input is greater than largest uint88).\n Counterpart to Solidity's `uint88` operator.\n Requirements:\n - input must fit into 88 bits"
                  },
                  "id": 8629,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toUint88",
                  "nameLocation": "11805:8:29",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8605,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8604,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "11822:5:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 8629,
                        "src": "11814:13:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8603,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "11814:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "11813:15:29"
                  },
                  "returnParameters": {
                    "id": 8608,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8607,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 8629,
                        "src": "11852:6:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint88",
                          "typeString": "uint88"
                        },
                        "typeName": {
                          "id": 8606,
                          "name": "uint88",
                          "nodeType": "ElementaryTypeName",
                          "src": "11852:6:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint88",
                            "typeString": "uint88"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "11851:8:29"
                  },
                  "scope": 9779,
                  "src": "11796:213:29",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 8656,
                    "nodeType": "Block",
                    "src": "12360:149:29",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8643,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 8637,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8632,
                            "src": "12374:5:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 8640,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "12387:6:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint80_$",
                                    "typeString": "type(uint80)"
                                  },
                                  "typeName": {
                                    "id": 8639,
                                    "name": "uint80",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "12387:6:29",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_uint80_$",
                                    "typeString": "type(uint80)"
                                  }
                                ],
                                "id": 8638,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -27,
                                "src": "12382:4:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 8641,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "12382:12:29",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_uint80",
                                "typeString": "type(uint80)"
                              }
                            },
                            "id": 8642,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberLocation": "12395:3:29",
                            "memberName": "max",
                            "nodeType": "MemberAccess",
                            "src": "12382:16:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint80",
                              "typeString": "uint80"
                            }
                          },
                          "src": "12374:24:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8650,
                        "nodeType": "IfStatement",
                        "src": "12370:103:29",
                        "trueBody": {
                          "id": 8649,
                          "nodeType": "Block",
                          "src": "12400:73:29",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "3830",
                                    "id": 8645,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "12452:2:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_80_by_1",
                                      "typeString": "int_const 80"
                                    },
                                    "value": "80"
                                  },
                                  {
                                    "id": 8646,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8632,
                                    "src": "12456:5:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_80_by_1",
                                      "typeString": "int_const 80"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 8644,
                                  "name": "SafeCastOverflowedUintDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8024,
                                  "src": "12421:30:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$",
                                    "typeString": "function (uint8,uint256) pure returns (error)"
                                  }
                                },
                                "id": 8647,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "12421:41:29",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 8648,
                              "nodeType": "RevertStatement",
                              "src": "12414:48:29"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 8653,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8632,
                              "src": "12496:5:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 8652,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "12489:6:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint80_$",
                              "typeString": "type(uint80)"
                            },
                            "typeName": {
                              "id": 8651,
                              "name": "uint80",
                              "nodeType": "ElementaryTypeName",
                              "src": "12489:6:29",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 8654,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12489:13:29",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint80",
                            "typeString": "uint80"
                          }
                        },
                        "functionReturnParameters": 8636,
                        "id": 8655,
                        "nodeType": "Return",
                        "src": "12482:20:29"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8630,
                    "nodeType": "StructuredDocumentation",
                    "src": "12015:276:29",
                    "text": " @dev Returns the downcasted uint80 from uint256, reverting on\n overflow (when the input is greater than largest uint80).\n Counterpart to Solidity's `uint80` operator.\n Requirements:\n - input must fit into 80 bits"
                  },
                  "id": 8657,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toUint80",
                  "nameLocation": "12305:8:29",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8633,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8632,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "12322:5:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 8657,
                        "src": "12314:13:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8631,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "12314:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "12313:15:29"
                  },
                  "returnParameters": {
                    "id": 8636,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8635,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 8657,
                        "src": "12352:6:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint80",
                          "typeString": "uint80"
                        },
                        "typeName": {
                          "id": 8634,
                          "name": "uint80",
                          "nodeType": "ElementaryTypeName",
                          "src": "12352:6:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint80",
                            "typeString": "uint80"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "12351:8:29"
                  },
                  "scope": 9779,
                  "src": "12296:213:29",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 8684,
                    "nodeType": "Block",
                    "src": "12860:149:29",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8671,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 8665,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8660,
                            "src": "12874:5:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 8668,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "12887:6:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint72_$",
                                    "typeString": "type(uint72)"
                                  },
                                  "typeName": {
                                    "id": 8667,
                                    "name": "uint72",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "12887:6:29",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_uint72_$",
                                    "typeString": "type(uint72)"
                                  }
                                ],
                                "id": 8666,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -27,
                                "src": "12882:4:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 8669,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "12882:12:29",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_uint72",
                                "typeString": "type(uint72)"
                              }
                            },
                            "id": 8670,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberLocation": "12895:3:29",
                            "memberName": "max",
                            "nodeType": "MemberAccess",
                            "src": "12882:16:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint72",
                              "typeString": "uint72"
                            }
                          },
                          "src": "12874:24:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8678,
                        "nodeType": "IfStatement",
                        "src": "12870:103:29",
                        "trueBody": {
                          "id": 8677,
                          "nodeType": "Block",
                          "src": "12900:73:29",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "3732",
                                    "id": 8673,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "12952:2:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_72_by_1",
                                      "typeString": "int_const 72"
                                    },
                                    "value": "72"
                                  },
                                  {
                                    "id": 8674,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8660,
                                    "src": "12956:5:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_72_by_1",
                                      "typeString": "int_const 72"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 8672,
                                  "name": "SafeCastOverflowedUintDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8024,
                                  "src": "12921:30:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$",
                                    "typeString": "function (uint8,uint256) pure returns (error)"
                                  }
                                },
                                "id": 8675,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "12921:41:29",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 8676,
                              "nodeType": "RevertStatement",
                              "src": "12914:48:29"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 8681,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8660,
                              "src": "12996:5:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 8680,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "12989:6:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint72_$",
                              "typeString": "type(uint72)"
                            },
                            "typeName": {
                              "id": 8679,
                              "name": "uint72",
                              "nodeType": "ElementaryTypeName",
                              "src": "12989:6:29",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 8682,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12989:13:29",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint72",
                            "typeString": "uint72"
                          }
                        },
                        "functionReturnParameters": 8664,
                        "id": 8683,
                        "nodeType": "Return",
                        "src": "12982:20:29"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8658,
                    "nodeType": "StructuredDocumentation",
                    "src": "12515:276:29",
                    "text": " @dev Returns the downcasted uint72 from uint256, reverting on\n overflow (when the input is greater than largest uint72).\n Counterpart to Solidity's `uint72` operator.\n Requirements:\n - input must fit into 72 bits"
                  },
                  "id": 8685,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toUint72",
                  "nameLocation": "12805:8:29",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8661,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8660,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "12822:5:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 8685,
                        "src": "12814:13:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8659,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "12814:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "12813:15:29"
                  },
                  "returnParameters": {
                    "id": 8664,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8663,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 8685,
                        "src": "12852:6:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint72",
                          "typeString": "uint72"
                        },
                        "typeName": {
                          "id": 8662,
                          "name": "uint72",
                          "nodeType": "ElementaryTypeName",
                          "src": "12852:6:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint72",
                            "typeString": "uint72"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "12851:8:29"
                  },
                  "scope": 9779,
                  "src": "12796:213:29",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 8712,
                    "nodeType": "Block",
                    "src": "13360:149:29",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8699,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 8693,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8688,
                            "src": "13374:5:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 8696,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "13387:6:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint64_$",
                                    "typeString": "type(uint64)"
                                  },
                                  "typeName": {
                                    "id": 8695,
                                    "name": "uint64",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "13387:6:29",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_uint64_$",
                                    "typeString": "type(uint64)"
                                  }
                                ],
                                "id": 8694,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -27,
                                "src": "13382:4:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 8697,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "13382:12:29",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_uint64",
                                "typeString": "type(uint64)"
                              }
                            },
                            "id": 8698,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberLocation": "13395:3:29",
                            "memberName": "max",
                            "nodeType": "MemberAccess",
                            "src": "13382:16:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "src": "13374:24:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8706,
                        "nodeType": "IfStatement",
                        "src": "13370:103:29",
                        "trueBody": {
                          "id": 8705,
                          "nodeType": "Block",
                          "src": "13400:73:29",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "3634",
                                    "id": 8701,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "13452:2:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_64_by_1",
                                      "typeString": "int_const 64"
                                    },
                                    "value": "64"
                                  },
                                  {
                                    "id": 8702,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8688,
                                    "src": "13456:5:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_64_by_1",
                                      "typeString": "int_const 64"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 8700,
                                  "name": "SafeCastOverflowedUintDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8024,
                                  "src": "13421:30:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$",
                                    "typeString": "function (uint8,uint256) pure returns (error)"
                                  }
                                },
                                "id": 8703,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "13421:41:29",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 8704,
                              "nodeType": "RevertStatement",
                              "src": "13414:48:29"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 8709,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8688,
                              "src": "13496:5:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 8708,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "13489:6:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint64_$",
                              "typeString": "type(uint64)"
                            },
                            "typeName": {
                              "id": 8707,
                              "name": "uint64",
                              "nodeType": "ElementaryTypeName",
                              "src": "13489:6:29",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 8710,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13489:13:29",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "functionReturnParameters": 8692,
                        "id": 8711,
                        "nodeType": "Return",
                        "src": "13482:20:29"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8686,
                    "nodeType": "StructuredDocumentation",
                    "src": "13015:276:29",
                    "text": " @dev Returns the downcasted uint64 from uint256, reverting on\n overflow (when the input is greater than largest uint64).\n Counterpart to Solidity's `uint64` operator.\n Requirements:\n - input must fit into 64 bits"
                  },
                  "id": 8713,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toUint64",
                  "nameLocation": "13305:8:29",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8689,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8688,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "13322:5:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 8713,
                        "src": "13314:13:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8687,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "13314:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "13313:15:29"
                  },
                  "returnParameters": {
                    "id": 8692,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8691,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 8713,
                        "src": "13352:6:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        "typeName": {
                          "id": 8690,
                          "name": "uint64",
                          "nodeType": "ElementaryTypeName",
                          "src": "13352:6:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "13351:8:29"
                  },
                  "scope": 9779,
                  "src": "13296:213:29",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 8740,
                    "nodeType": "Block",
                    "src": "13860:149:29",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8727,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 8721,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8716,
                            "src": "13874:5:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 8724,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "13887:6:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint56_$",
                                    "typeString": "type(uint56)"
                                  },
                                  "typeName": {
                                    "id": 8723,
                                    "name": "uint56",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "13887:6:29",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_uint56_$",
                                    "typeString": "type(uint56)"
                                  }
                                ],
                                "id": 8722,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -27,
                                "src": "13882:4:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 8725,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "13882:12:29",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_uint56",
                                "typeString": "type(uint56)"
                              }
                            },
                            "id": 8726,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberLocation": "13895:3:29",
                            "memberName": "max",
                            "nodeType": "MemberAccess",
                            "src": "13882:16:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint56",
                              "typeString": "uint56"
                            }
                          },
                          "src": "13874:24:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8734,
                        "nodeType": "IfStatement",
                        "src": "13870:103:29",
                        "trueBody": {
                          "id": 8733,
                          "nodeType": "Block",
                          "src": "13900:73:29",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "3536",
                                    "id": 8729,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "13952:2:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_56_by_1",
                                      "typeString": "int_const 56"
                                    },
                                    "value": "56"
                                  },
                                  {
                                    "id": 8730,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8716,
                                    "src": "13956:5:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_56_by_1",
                                      "typeString": "int_const 56"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 8728,
                                  "name": "SafeCastOverflowedUintDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8024,
                                  "src": "13921:30:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$",
                                    "typeString": "function (uint8,uint256) pure returns (error)"
                                  }
                                },
                                "id": 8731,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "13921:41:29",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 8732,
                              "nodeType": "RevertStatement",
                              "src": "13914:48:29"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 8737,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8716,
                              "src": "13996:5:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 8736,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "13989:6:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint56_$",
                              "typeString": "type(uint56)"
                            },
                            "typeName": {
                              "id": 8735,
                              "name": "uint56",
                              "nodeType": "ElementaryTypeName",
                              "src": "13989:6:29",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 8738,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13989:13:29",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint56",
                            "typeString": "uint56"
                          }
                        },
                        "functionReturnParameters": 8720,
                        "id": 8739,
                        "nodeType": "Return",
                        "src": "13982:20:29"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8714,
                    "nodeType": "StructuredDocumentation",
                    "src": "13515:276:29",
                    "text": " @dev Returns the downcasted uint56 from uint256, reverting on\n overflow (when the input is greater than largest uint56).\n Counterpart to Solidity's `uint56` operator.\n Requirements:\n - input must fit into 56 bits"
                  },
                  "id": 8741,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toUint56",
                  "nameLocation": "13805:8:29",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8717,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8716,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "13822:5:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 8741,
                        "src": "13814:13:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8715,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "13814:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "13813:15:29"
                  },
                  "returnParameters": {
                    "id": 8720,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8719,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 8741,
                        "src": "13852:6:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint56",
                          "typeString": "uint56"
                        },
                        "typeName": {
                          "id": 8718,
                          "name": "uint56",
                          "nodeType": "ElementaryTypeName",
                          "src": "13852:6:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint56",
                            "typeString": "uint56"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "13851:8:29"
                  },
                  "scope": 9779,
                  "src": "13796:213:29",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 8768,
                    "nodeType": "Block",
                    "src": "14360:149:29",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8755,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 8749,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8744,
                            "src": "14374:5:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 8752,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "14387:6:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint48_$",
                                    "typeString": "type(uint48)"
                                  },
                                  "typeName": {
                                    "id": 8751,
                                    "name": "uint48",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "14387:6:29",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_uint48_$",
                                    "typeString": "type(uint48)"
                                  }
                                ],
                                "id": 8750,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -27,
                                "src": "14382:4:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 8753,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "14382:12:29",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_uint48",
                                "typeString": "type(uint48)"
                              }
                            },
                            "id": 8754,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberLocation": "14395:3:29",
                            "memberName": "max",
                            "nodeType": "MemberAccess",
                            "src": "14382:16:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint48",
                              "typeString": "uint48"
                            }
                          },
                          "src": "14374:24:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8762,
                        "nodeType": "IfStatement",
                        "src": "14370:103:29",
                        "trueBody": {
                          "id": 8761,
                          "nodeType": "Block",
                          "src": "14400:73:29",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "3438",
                                    "id": 8757,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "14452:2:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_48_by_1",
                                      "typeString": "int_const 48"
                                    },
                                    "value": "48"
                                  },
                                  {
                                    "id": 8758,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8744,
                                    "src": "14456:5:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_48_by_1",
                                      "typeString": "int_const 48"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 8756,
                                  "name": "SafeCastOverflowedUintDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8024,
                                  "src": "14421:30:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$",
                                    "typeString": "function (uint8,uint256) pure returns (error)"
                                  }
                                },
                                "id": 8759,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "14421:41:29",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 8760,
                              "nodeType": "RevertStatement",
                              "src": "14414:48:29"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 8765,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8744,
                              "src": "14496:5:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 8764,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "14489:6:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint48_$",
                              "typeString": "type(uint48)"
                            },
                            "typeName": {
                              "id": 8763,
                              "name": "uint48",
                              "nodeType": "ElementaryTypeName",
                              "src": "14489:6:29",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 8766,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14489:13:29",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint48",
                            "typeString": "uint48"
                          }
                        },
                        "functionReturnParameters": 8748,
                        "id": 8767,
                        "nodeType": "Return",
                        "src": "14482:20:29"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8742,
                    "nodeType": "StructuredDocumentation",
                    "src": "14015:276:29",
                    "text": " @dev Returns the downcasted uint48 from uint256, reverting on\n overflow (when the input is greater than largest uint48).\n Counterpart to Solidity's `uint48` operator.\n Requirements:\n - input must fit into 48 bits"
                  },
                  "id": 8769,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toUint48",
                  "nameLocation": "14305:8:29",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8745,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8744,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "14322:5:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 8769,
                        "src": "14314:13:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8743,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "14314:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "14313:15:29"
                  },
                  "returnParameters": {
                    "id": 8748,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8747,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 8769,
                        "src": "14352:6:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint48",
                          "typeString": "uint48"
                        },
                        "typeName": {
                          "id": 8746,
                          "name": "uint48",
                          "nodeType": "ElementaryTypeName",
                          "src": "14352:6:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint48",
                            "typeString": "uint48"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "14351:8:29"
                  },
                  "scope": 9779,
                  "src": "14296:213:29",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 8796,
                    "nodeType": "Block",
                    "src": "14860:149:29",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8783,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 8777,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8772,
                            "src": "14874:5:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 8780,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "14887:6:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint40_$",
                                    "typeString": "type(uint40)"
                                  },
                                  "typeName": {
                                    "id": 8779,
                                    "name": "uint40",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "14887:6:29",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_uint40_$",
                                    "typeString": "type(uint40)"
                                  }
                                ],
                                "id": 8778,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -27,
                                "src": "14882:4:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 8781,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "14882:12:29",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_uint40",
                                "typeString": "type(uint40)"
                              }
                            },
                            "id": 8782,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberLocation": "14895:3:29",
                            "memberName": "max",
                            "nodeType": "MemberAccess",
                            "src": "14882:16:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint40",
                              "typeString": "uint40"
                            }
                          },
                          "src": "14874:24:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8790,
                        "nodeType": "IfStatement",
                        "src": "14870:103:29",
                        "trueBody": {
                          "id": 8789,
                          "nodeType": "Block",
                          "src": "14900:73:29",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "3430",
                                    "id": 8785,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "14952:2:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_40_by_1",
                                      "typeString": "int_const 40"
                                    },
                                    "value": "40"
                                  },
                                  {
                                    "id": 8786,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8772,
                                    "src": "14956:5:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_40_by_1",
                                      "typeString": "int_const 40"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 8784,
                                  "name": "SafeCastOverflowedUintDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8024,
                                  "src": "14921:30:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$",
                                    "typeString": "function (uint8,uint256) pure returns (error)"
                                  }
                                },
                                "id": 8787,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "14921:41:29",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 8788,
                              "nodeType": "RevertStatement",
                              "src": "14914:48:29"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 8793,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8772,
                              "src": "14996:5:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 8792,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "14989:6:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint40_$",
                              "typeString": "type(uint40)"
                            },
                            "typeName": {
                              "id": 8791,
                              "name": "uint40",
                              "nodeType": "ElementaryTypeName",
                              "src": "14989:6:29",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 8794,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14989:13:29",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint40",
                            "typeString": "uint40"
                          }
                        },
                        "functionReturnParameters": 8776,
                        "id": 8795,
                        "nodeType": "Return",
                        "src": "14982:20:29"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8770,
                    "nodeType": "StructuredDocumentation",
                    "src": "14515:276:29",
                    "text": " @dev Returns the downcasted uint40 from uint256, reverting on\n overflow (when the input is greater than largest uint40).\n Counterpart to Solidity's `uint40` operator.\n Requirements:\n - input must fit into 40 bits"
                  },
                  "id": 8797,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toUint40",
                  "nameLocation": "14805:8:29",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8773,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8772,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "14822:5:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 8797,
                        "src": "14814:13:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8771,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "14814:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "14813:15:29"
                  },
                  "returnParameters": {
                    "id": 8776,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8775,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 8797,
                        "src": "14852:6:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint40",
                          "typeString": "uint40"
                        },
                        "typeName": {
                          "id": 8774,
                          "name": "uint40",
                          "nodeType": "ElementaryTypeName",
                          "src": "14852:6:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint40",
                            "typeString": "uint40"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "14851:8:29"
                  },
                  "scope": 9779,
                  "src": "14796:213:29",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 8824,
                    "nodeType": "Block",
                    "src": "15360:149:29",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8811,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 8805,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8800,
                            "src": "15374:5:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 8808,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "15387:6:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint32_$",
                                    "typeString": "type(uint32)"
                                  },
                                  "typeName": {
                                    "id": 8807,
                                    "name": "uint32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "15387:6:29",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_uint32_$",
                                    "typeString": "type(uint32)"
                                  }
                                ],
                                "id": 8806,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -27,
                                "src": "15382:4:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 8809,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "15382:12:29",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_uint32",
                                "typeString": "type(uint32)"
                              }
                            },
                            "id": 8810,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberLocation": "15395:3:29",
                            "memberName": "max",
                            "nodeType": "MemberAccess",
                            "src": "15382:16:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          "src": "15374:24:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8818,
                        "nodeType": "IfStatement",
                        "src": "15370:103:29",
                        "trueBody": {
                          "id": 8817,
                          "nodeType": "Block",
                          "src": "15400:73:29",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "3332",
                                    "id": 8813,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "15452:2:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_32_by_1",
                                      "typeString": "int_const 32"
                                    },
                                    "value": "32"
                                  },
                                  {
                                    "id": 8814,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8800,
                                    "src": "15456:5:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_32_by_1",
                                      "typeString": "int_const 32"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 8812,
                                  "name": "SafeCastOverflowedUintDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8024,
                                  "src": "15421:30:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$",
                                    "typeString": "function (uint8,uint256) pure returns (error)"
                                  }
                                },
                                "id": 8815,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "15421:41:29",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 8816,
                              "nodeType": "RevertStatement",
                              "src": "15414:48:29"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 8821,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8800,
                              "src": "15496:5:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 8820,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "15489:6:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint32_$",
                              "typeString": "type(uint32)"
                            },
                            "typeName": {
                              "id": 8819,
                              "name": "uint32",
                              "nodeType": "ElementaryTypeName",
                              "src": "15489:6:29",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 8822,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "15489:13:29",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "functionReturnParameters": 8804,
                        "id": 8823,
                        "nodeType": "Return",
                        "src": "15482:20:29"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8798,
                    "nodeType": "StructuredDocumentation",
                    "src": "15015:276:29",
                    "text": " @dev Returns the downcasted uint32 from uint256, reverting on\n overflow (when the input is greater than largest uint32).\n Counterpart to Solidity's `uint32` operator.\n Requirements:\n - input must fit into 32 bits"
                  },
                  "id": 8825,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toUint32",
                  "nameLocation": "15305:8:29",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8801,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8800,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "15322:5:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 8825,
                        "src": "15314:13:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8799,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "15314:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "15313:15:29"
                  },
                  "returnParameters": {
                    "id": 8804,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8803,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 8825,
                        "src": "15352:6:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        "typeName": {
                          "id": 8802,
                          "name": "uint32",
                          "nodeType": "ElementaryTypeName",
                          "src": "15352:6:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "15351:8:29"
                  },
                  "scope": 9779,
                  "src": "15296:213:29",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 8852,
                    "nodeType": "Block",
                    "src": "15860:149:29",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8839,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 8833,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8828,
                            "src": "15874:5:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 8836,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "15887:6:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint24_$",
                                    "typeString": "type(uint24)"
                                  },
                                  "typeName": {
                                    "id": 8835,
                                    "name": "uint24",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "15887:6:29",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_uint24_$",
                                    "typeString": "type(uint24)"
                                  }
                                ],
                                "id": 8834,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -27,
                                "src": "15882:4:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 8837,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "15882:12:29",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_uint24",
                                "typeString": "type(uint24)"
                              }
                            },
                            "id": 8838,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberLocation": "15895:3:29",
                            "memberName": "max",
                            "nodeType": "MemberAccess",
                            "src": "15882:16:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint24",
                              "typeString": "uint24"
                            }
                          },
                          "src": "15874:24:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8846,
                        "nodeType": "IfStatement",
                        "src": "15870:103:29",
                        "trueBody": {
                          "id": 8845,
                          "nodeType": "Block",
                          "src": "15900:73:29",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "3234",
                                    "id": 8841,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "15952:2:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_24_by_1",
                                      "typeString": "int_const 24"
                                    },
                                    "value": "24"
                                  },
                                  {
                                    "id": 8842,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8828,
                                    "src": "15956:5:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_24_by_1",
                                      "typeString": "int_const 24"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 8840,
                                  "name": "SafeCastOverflowedUintDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8024,
                                  "src": "15921:30:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$",
                                    "typeString": "function (uint8,uint256) pure returns (error)"
                                  }
                                },
                                "id": 8843,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "15921:41:29",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 8844,
                              "nodeType": "RevertStatement",
                              "src": "15914:48:29"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 8849,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8828,
                              "src": "15996:5:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 8848,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "15989:6:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint24_$",
                              "typeString": "type(uint24)"
                            },
                            "typeName": {
                              "id": 8847,
                              "name": "uint24",
                              "nodeType": "ElementaryTypeName",
                              "src": "15989:6:29",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 8850,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "15989:13:29",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint24",
                            "typeString": "uint24"
                          }
                        },
                        "functionReturnParameters": 8832,
                        "id": 8851,
                        "nodeType": "Return",
                        "src": "15982:20:29"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8826,
                    "nodeType": "StructuredDocumentation",
                    "src": "15515:276:29",
                    "text": " @dev Returns the downcasted uint24 from uint256, reverting on\n overflow (when the input is greater than largest uint24).\n Counterpart to Solidity's `uint24` operator.\n Requirements:\n - input must fit into 24 bits"
                  },
                  "id": 8853,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toUint24",
                  "nameLocation": "15805:8:29",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8829,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8828,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "15822:5:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 8853,
                        "src": "15814:13:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8827,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "15814:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "15813:15:29"
                  },
                  "returnParameters": {
                    "id": 8832,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8831,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 8853,
                        "src": "15852:6:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint24",
                          "typeString": "uint24"
                        },
                        "typeName": {
                          "id": 8830,
                          "name": "uint24",
                          "nodeType": "ElementaryTypeName",
                          "src": "15852:6:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint24",
                            "typeString": "uint24"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "15851:8:29"
                  },
                  "scope": 9779,
                  "src": "15796:213:29",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 8880,
                    "nodeType": "Block",
                    "src": "16360:149:29",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8867,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 8861,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8856,
                            "src": "16374:5:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 8864,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "16387:6:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint16_$",
                                    "typeString": "type(uint16)"
                                  },
                                  "typeName": {
                                    "id": 8863,
                                    "name": "uint16",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "16387:6:29",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_uint16_$",
                                    "typeString": "type(uint16)"
                                  }
                                ],
                                "id": 8862,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -27,
                                "src": "16382:4:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 8865,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "16382:12:29",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_uint16",
                                "typeString": "type(uint16)"
                              }
                            },
                            "id": 8866,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberLocation": "16395:3:29",
                            "memberName": "max",
                            "nodeType": "MemberAccess",
                            "src": "16382:16:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          },
                          "src": "16374:24:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8874,
                        "nodeType": "IfStatement",
                        "src": "16370:103:29",
                        "trueBody": {
                          "id": 8873,
                          "nodeType": "Block",
                          "src": "16400:73:29",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "3136",
                                    "id": 8869,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "16452:2:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_16_by_1",
                                      "typeString": "int_const 16"
                                    },
                                    "value": "16"
                                  },
                                  {
                                    "id": 8870,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8856,
                                    "src": "16456:5:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_16_by_1",
                                      "typeString": "int_const 16"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 8868,
                                  "name": "SafeCastOverflowedUintDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8024,
                                  "src": "16421:30:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$",
                                    "typeString": "function (uint8,uint256) pure returns (error)"
                                  }
                                },
                                "id": 8871,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "16421:41:29",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 8872,
                              "nodeType": "RevertStatement",
                              "src": "16414:48:29"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 8877,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8856,
                              "src": "16496:5:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 8876,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "16489:6:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint16_$",
                              "typeString": "type(uint16)"
                            },
                            "typeName": {
                              "id": 8875,
                              "name": "uint16",
                              "nodeType": "ElementaryTypeName",
                              "src": "16489:6:29",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 8878,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16489:13:29",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "functionReturnParameters": 8860,
                        "id": 8879,
                        "nodeType": "Return",
                        "src": "16482:20:29"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8854,
                    "nodeType": "StructuredDocumentation",
                    "src": "16015:276:29",
                    "text": " @dev Returns the downcasted uint16 from uint256, reverting on\n overflow (when the input is greater than largest uint16).\n Counterpart to Solidity's `uint16` operator.\n Requirements:\n - input must fit into 16 bits"
                  },
                  "id": 8881,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toUint16",
                  "nameLocation": "16305:8:29",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8857,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8856,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "16322:5:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 8881,
                        "src": "16314:13:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8855,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "16314:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "16313:15:29"
                  },
                  "returnParameters": {
                    "id": 8860,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8859,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 8881,
                        "src": "16352:6:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        },
                        "typeName": {
                          "id": 8858,
                          "name": "uint16",
                          "nodeType": "ElementaryTypeName",
                          "src": "16352:6:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "16351:8:29"
                  },
                  "scope": 9779,
                  "src": "16296:213:29",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 8908,
                    "nodeType": "Block",
                    "src": "16854:146:29",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 8895,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 8889,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8884,
                            "src": "16868:5:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 8892,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "16881:5:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint8_$",
                                    "typeString": "type(uint8)"
                                  },
                                  "typeName": {
                                    "id": 8891,
                                    "name": "uint8",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "16881:5:29",
                                    "typeDescriptions": {}
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_type$_t_uint8_$",
                                    "typeString": "type(uint8)"
                                  }
                                ],
                                "id": 8890,
                                "name": "type",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -27,
                                "src": "16876:4:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 8893,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "16876:11:29",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_meta_type_t_uint8",
                                "typeString": "type(uint8)"
                              }
                            },
                            "id": 8894,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberLocation": "16888:3:29",
                            "memberName": "max",
                            "nodeType": "MemberAccess",
                            "src": "16876:15:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "src": "16868:23:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8902,
                        "nodeType": "IfStatement",
                        "src": "16864:101:29",
                        "trueBody": {
                          "id": 8901,
                          "nodeType": "Block",
                          "src": "16893:72:29",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "38",
                                    "id": 8897,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "16945:1:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_8_by_1",
                                      "typeString": "int_const 8"
                                    },
                                    "value": "8"
                                  },
                                  {
                                    "id": 8898,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8884,
                                    "src": "16948:5:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_8_by_1",
                                      "typeString": "int_const 8"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 8896,
                                  "name": "SafeCastOverflowedUintDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8024,
                                  "src": "16914:30:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$",
                                    "typeString": "function (uint8,uint256) pure returns (error)"
                                  }
                                },
                                "id": 8899,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "16914:40:29",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 8900,
                              "nodeType": "RevertStatement",
                              "src": "16907:47:29"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 8905,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8884,
                              "src": "16987:5:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 8904,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "16981:5:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint8_$",
                              "typeString": "type(uint8)"
                            },
                            "typeName": {
                              "id": 8903,
                              "name": "uint8",
                              "nodeType": "ElementaryTypeName",
                              "src": "16981:5:29",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 8906,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16981:12:29",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "functionReturnParameters": 8888,
                        "id": 8907,
                        "nodeType": "Return",
                        "src": "16974:19:29"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8882,
                    "nodeType": "StructuredDocumentation",
                    "src": "16515:272:29",
                    "text": " @dev Returns the downcasted uint8 from uint256, reverting on\n overflow (when the input is greater than largest uint8).\n Counterpart to Solidity's `uint8` operator.\n Requirements:\n - input must fit into 8 bits"
                  },
                  "id": 8909,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toUint8",
                  "nameLocation": "16801:7:29",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8885,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8884,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "16817:5:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 8909,
                        "src": "16809:13:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8883,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "16809:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "16808:15:29"
                  },
                  "returnParameters": {
                    "id": 8888,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8887,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 8909,
                        "src": "16847:5:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 8886,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "16847:5:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "16846:7:29"
                  },
                  "scope": 9779,
                  "src": "16792:208:29",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 8931,
                    "nodeType": "Block",
                    "src": "17236:128:29",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 8919,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 8917,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8912,
                            "src": "17250:5:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 8918,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "17258:1:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "17250:9:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8925,
                        "nodeType": "IfStatement",
                        "src": "17246:81:29",
                        "trueBody": {
                          "id": 8924,
                          "nodeType": "Block",
                          "src": "17261:66:29",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "id": 8921,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8912,
                                    "src": "17310:5:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 8920,
                                  "name": "SafeCastOverflowedIntToUint",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8029,
                                  "src": "17282:27:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_int256_$returns$_t_error_$",
                                    "typeString": "function (int256) pure returns (error)"
                                  }
                                },
                                "id": 8922,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "17282:34:29",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 8923,
                              "nodeType": "RevertStatement",
                              "src": "17275:41:29"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 8928,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 8912,
                              "src": "17351:5:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            ],
                            "id": 8927,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "17343:7:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": {
                              "id": 8926,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "17343:7:29",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 8929,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "17343:14:29",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 8916,
                        "id": 8930,
                        "nodeType": "Return",
                        "src": "17336:21:29"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8910,
                    "nodeType": "StructuredDocumentation",
                    "src": "17006:160:29",
                    "text": " @dev Converts a signed int256 into an unsigned uint256.\n Requirements:\n - input must be greater than or equal to 0."
                  },
                  "id": 8932,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toUint256",
                  "nameLocation": "17180:9:29",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8913,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8912,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "17197:5:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 8932,
                        "src": "17190:12:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 8911,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "17190:6:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "17189:14:29"
                  },
                  "returnParameters": {
                    "id": 8916,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8915,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 8932,
                        "src": "17227:7:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 8914,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "17227:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "17226:9:29"
                  },
                  "scope": 9779,
                  "src": "17171:193:29",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 8957,
                    "nodeType": "Block",
                    "src": "17761:150:29",
                    "statements": [
                      {
                        "expression": {
                          "id": 8945,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 8940,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8938,
                            "src": "17771:10:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int248",
                              "typeString": "int248"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 8943,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8935,
                                "src": "17791:5:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "id": 8942,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "17784:6:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_int248_$",
                                "typeString": "type(int248)"
                              },
                              "typeName": {
                                "id": 8941,
                                "name": "int248",
                                "nodeType": "ElementaryTypeName",
                                "src": "17784:6:29",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 8944,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "17784:13:29",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int248",
                              "typeString": "int248"
                            }
                          },
                          "src": "17771:26:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int248",
                            "typeString": "int248"
                          }
                        },
                        "id": 8946,
                        "nodeType": "ExpressionStatement",
                        "src": "17771:26:29"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 8949,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 8947,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8938,
                            "src": "17811:10:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int248",
                              "typeString": "int248"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 8948,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8935,
                            "src": "17825:5:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "17811:19:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8956,
                        "nodeType": "IfStatement",
                        "src": "17807:98:29",
                        "trueBody": {
                          "id": 8955,
                          "nodeType": "Block",
                          "src": "17832:73:29",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "323438",
                                    "id": 8951,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "17883:3:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_248_by_1",
                                      "typeString": "int_const 248"
                                    },
                                    "value": "248"
                                  },
                                  {
                                    "id": 8952,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8935,
                                    "src": "17888:5:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_248_by_1",
                                      "typeString": "int_const 248"
                                    },
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 8950,
                                  "name": "SafeCastOverflowedIntDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8036,
                                  "src": "17853:29:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$",
                                    "typeString": "function (uint8,int256) pure returns (error)"
                                  }
                                },
                                "id": 8953,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "17853:41:29",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 8954,
                              "nodeType": "RevertStatement",
                              "src": "17846:48:29"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8933,
                    "nodeType": "StructuredDocumentation",
                    "src": "17370:312:29",
                    "text": " @dev Returns the downcasted int248 from int256, reverting on\n overflow (when the input is less than smallest int248 or\n greater than largest int248).\n Counterpart to Solidity's `int248` operator.\n Requirements:\n - input must fit into 248 bits"
                  },
                  "id": 8958,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toInt248",
                  "nameLocation": "17696:8:29",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8936,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8935,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "17712:5:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 8958,
                        "src": "17705:12:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 8934,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "17705:6:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "17704:14:29"
                  },
                  "returnParameters": {
                    "id": 8939,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8938,
                        "mutability": "mutable",
                        "name": "downcasted",
                        "nameLocation": "17749:10:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 8958,
                        "src": "17742:17:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int248",
                          "typeString": "int248"
                        },
                        "typeName": {
                          "id": 8937,
                          "name": "int248",
                          "nodeType": "ElementaryTypeName",
                          "src": "17742:6:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int248",
                            "typeString": "int248"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "17741:19:29"
                  },
                  "scope": 9779,
                  "src": "17687:224:29",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 8983,
                    "nodeType": "Block",
                    "src": "18308:150:29",
                    "statements": [
                      {
                        "expression": {
                          "id": 8971,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 8966,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8964,
                            "src": "18318:10:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int240",
                              "typeString": "int240"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 8969,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8961,
                                "src": "18338:5:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "id": 8968,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "18331:6:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_int240_$",
                                "typeString": "type(int240)"
                              },
                              "typeName": {
                                "id": 8967,
                                "name": "int240",
                                "nodeType": "ElementaryTypeName",
                                "src": "18331:6:29",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 8970,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "18331:13:29",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int240",
                              "typeString": "int240"
                            }
                          },
                          "src": "18318:26:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int240",
                            "typeString": "int240"
                          }
                        },
                        "id": 8972,
                        "nodeType": "ExpressionStatement",
                        "src": "18318:26:29"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 8975,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 8973,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8964,
                            "src": "18358:10:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int240",
                              "typeString": "int240"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 8974,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8961,
                            "src": "18372:5:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "18358:19:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 8982,
                        "nodeType": "IfStatement",
                        "src": "18354:98:29",
                        "trueBody": {
                          "id": 8981,
                          "nodeType": "Block",
                          "src": "18379:73:29",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "323430",
                                    "id": 8977,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "18430:3:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_240_by_1",
                                      "typeString": "int_const 240"
                                    },
                                    "value": "240"
                                  },
                                  {
                                    "id": 8978,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8961,
                                    "src": "18435:5:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_240_by_1",
                                      "typeString": "int_const 240"
                                    },
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 8976,
                                  "name": "SafeCastOverflowedIntDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8036,
                                  "src": "18400:29:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$",
                                    "typeString": "function (uint8,int256) pure returns (error)"
                                  }
                                },
                                "id": 8979,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "18400:41:29",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 8980,
                              "nodeType": "RevertStatement",
                              "src": "18393:48:29"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8959,
                    "nodeType": "StructuredDocumentation",
                    "src": "17917:312:29",
                    "text": " @dev Returns the downcasted int240 from int256, reverting on\n overflow (when the input is less than smallest int240 or\n greater than largest int240).\n Counterpart to Solidity's `int240` operator.\n Requirements:\n - input must fit into 240 bits"
                  },
                  "id": 8984,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toInt240",
                  "nameLocation": "18243:8:29",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8962,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8961,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "18259:5:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 8984,
                        "src": "18252:12:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 8960,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "18252:6:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "18251:14:29"
                  },
                  "returnParameters": {
                    "id": 8965,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8964,
                        "mutability": "mutable",
                        "name": "downcasted",
                        "nameLocation": "18296:10:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 8984,
                        "src": "18289:17:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int240",
                          "typeString": "int240"
                        },
                        "typeName": {
                          "id": 8963,
                          "name": "int240",
                          "nodeType": "ElementaryTypeName",
                          "src": "18289:6:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int240",
                            "typeString": "int240"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "18288:19:29"
                  },
                  "scope": 9779,
                  "src": "18234:224:29",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 9009,
                    "nodeType": "Block",
                    "src": "18855:150:29",
                    "statements": [
                      {
                        "expression": {
                          "id": 8997,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 8992,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8990,
                            "src": "18865:10:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int232",
                              "typeString": "int232"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 8995,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 8987,
                                "src": "18885:5:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "id": 8994,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "18878:6:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_int232_$",
                                "typeString": "type(int232)"
                              },
                              "typeName": {
                                "id": 8993,
                                "name": "int232",
                                "nodeType": "ElementaryTypeName",
                                "src": "18878:6:29",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 8996,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "18878:13:29",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int232",
                              "typeString": "int232"
                            }
                          },
                          "src": "18865:26:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int232",
                            "typeString": "int232"
                          }
                        },
                        "id": 8998,
                        "nodeType": "ExpressionStatement",
                        "src": "18865:26:29"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 9001,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 8999,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8990,
                            "src": "18905:10:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int232",
                              "typeString": "int232"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 9000,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8987,
                            "src": "18919:5:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "18905:19:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 9008,
                        "nodeType": "IfStatement",
                        "src": "18901:98:29",
                        "trueBody": {
                          "id": 9007,
                          "nodeType": "Block",
                          "src": "18926:73:29",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "323332",
                                    "id": 9003,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "18977:3:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_232_by_1",
                                      "typeString": "int_const 232"
                                    },
                                    "value": "232"
                                  },
                                  {
                                    "id": 9004,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8987,
                                    "src": "18982:5:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_232_by_1",
                                      "typeString": "int_const 232"
                                    },
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 9002,
                                  "name": "SafeCastOverflowedIntDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8036,
                                  "src": "18947:29:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$",
                                    "typeString": "function (uint8,int256) pure returns (error)"
                                  }
                                },
                                "id": 9005,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "18947:41:29",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 9006,
                              "nodeType": "RevertStatement",
                              "src": "18940:48:29"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 8985,
                    "nodeType": "StructuredDocumentation",
                    "src": "18464:312:29",
                    "text": " @dev Returns the downcasted int232 from int256, reverting on\n overflow (when the input is less than smallest int232 or\n greater than largest int232).\n Counterpart to Solidity's `int232` operator.\n Requirements:\n - input must fit into 232 bits"
                  },
                  "id": 9010,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toInt232",
                  "nameLocation": "18790:8:29",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8988,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8987,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "18806:5:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 9010,
                        "src": "18799:12:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 8986,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "18799:6:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "18798:14:29"
                  },
                  "returnParameters": {
                    "id": 8991,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 8990,
                        "mutability": "mutable",
                        "name": "downcasted",
                        "nameLocation": "18843:10:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 9010,
                        "src": "18836:17:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int232",
                          "typeString": "int232"
                        },
                        "typeName": {
                          "id": 8989,
                          "name": "int232",
                          "nodeType": "ElementaryTypeName",
                          "src": "18836:6:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int232",
                            "typeString": "int232"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "18835:19:29"
                  },
                  "scope": 9779,
                  "src": "18781:224:29",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 9035,
                    "nodeType": "Block",
                    "src": "19402:150:29",
                    "statements": [
                      {
                        "expression": {
                          "id": 9023,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 9018,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9016,
                            "src": "19412:10:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int224",
                              "typeString": "int224"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 9021,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9013,
                                "src": "19432:5:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "id": 9020,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "19425:6:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_int224_$",
                                "typeString": "type(int224)"
                              },
                              "typeName": {
                                "id": 9019,
                                "name": "int224",
                                "nodeType": "ElementaryTypeName",
                                "src": "19425:6:29",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 9022,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "19425:13:29",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int224",
                              "typeString": "int224"
                            }
                          },
                          "src": "19412:26:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int224",
                            "typeString": "int224"
                          }
                        },
                        "id": 9024,
                        "nodeType": "ExpressionStatement",
                        "src": "19412:26:29"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 9027,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 9025,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9016,
                            "src": "19452:10:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int224",
                              "typeString": "int224"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 9026,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9013,
                            "src": "19466:5:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "19452:19:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 9034,
                        "nodeType": "IfStatement",
                        "src": "19448:98:29",
                        "trueBody": {
                          "id": 9033,
                          "nodeType": "Block",
                          "src": "19473:73:29",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "323234",
                                    "id": 9029,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "19524:3:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_224_by_1",
                                      "typeString": "int_const 224"
                                    },
                                    "value": "224"
                                  },
                                  {
                                    "id": 9030,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9013,
                                    "src": "19529:5:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_224_by_1",
                                      "typeString": "int_const 224"
                                    },
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 9028,
                                  "name": "SafeCastOverflowedIntDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8036,
                                  "src": "19494:29:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$",
                                    "typeString": "function (uint8,int256) pure returns (error)"
                                  }
                                },
                                "id": 9031,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "19494:41:29",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 9032,
                              "nodeType": "RevertStatement",
                              "src": "19487:48:29"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 9011,
                    "nodeType": "StructuredDocumentation",
                    "src": "19011:312:29",
                    "text": " @dev Returns the downcasted int224 from int256, reverting on\n overflow (when the input is less than smallest int224 or\n greater than largest int224).\n Counterpart to Solidity's `int224` operator.\n Requirements:\n - input must fit into 224 bits"
                  },
                  "id": 9036,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toInt224",
                  "nameLocation": "19337:8:29",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9014,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9013,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "19353:5:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 9036,
                        "src": "19346:12:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 9012,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "19346:6:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "19345:14:29"
                  },
                  "returnParameters": {
                    "id": 9017,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9016,
                        "mutability": "mutable",
                        "name": "downcasted",
                        "nameLocation": "19390:10:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 9036,
                        "src": "19383:17:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int224",
                          "typeString": "int224"
                        },
                        "typeName": {
                          "id": 9015,
                          "name": "int224",
                          "nodeType": "ElementaryTypeName",
                          "src": "19383:6:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int224",
                            "typeString": "int224"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "19382:19:29"
                  },
                  "scope": 9779,
                  "src": "19328:224:29",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 9061,
                    "nodeType": "Block",
                    "src": "19949:150:29",
                    "statements": [
                      {
                        "expression": {
                          "id": 9049,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 9044,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9042,
                            "src": "19959:10:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int216",
                              "typeString": "int216"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 9047,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9039,
                                "src": "19979:5:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "id": 9046,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "19972:6:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_int216_$",
                                "typeString": "type(int216)"
                              },
                              "typeName": {
                                "id": 9045,
                                "name": "int216",
                                "nodeType": "ElementaryTypeName",
                                "src": "19972:6:29",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 9048,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "19972:13:29",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int216",
                              "typeString": "int216"
                            }
                          },
                          "src": "19959:26:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int216",
                            "typeString": "int216"
                          }
                        },
                        "id": 9050,
                        "nodeType": "ExpressionStatement",
                        "src": "19959:26:29"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 9053,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 9051,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9042,
                            "src": "19999:10:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int216",
                              "typeString": "int216"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 9052,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9039,
                            "src": "20013:5:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "19999:19:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 9060,
                        "nodeType": "IfStatement",
                        "src": "19995:98:29",
                        "trueBody": {
                          "id": 9059,
                          "nodeType": "Block",
                          "src": "20020:73:29",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "323136",
                                    "id": 9055,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "20071:3:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_216_by_1",
                                      "typeString": "int_const 216"
                                    },
                                    "value": "216"
                                  },
                                  {
                                    "id": 9056,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9039,
                                    "src": "20076:5:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_216_by_1",
                                      "typeString": "int_const 216"
                                    },
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 9054,
                                  "name": "SafeCastOverflowedIntDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8036,
                                  "src": "20041:29:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$",
                                    "typeString": "function (uint8,int256) pure returns (error)"
                                  }
                                },
                                "id": 9057,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "20041:41:29",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 9058,
                              "nodeType": "RevertStatement",
                              "src": "20034:48:29"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 9037,
                    "nodeType": "StructuredDocumentation",
                    "src": "19558:312:29",
                    "text": " @dev Returns the downcasted int216 from int256, reverting on\n overflow (when the input is less than smallest int216 or\n greater than largest int216).\n Counterpart to Solidity's `int216` operator.\n Requirements:\n - input must fit into 216 bits"
                  },
                  "id": 9062,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toInt216",
                  "nameLocation": "19884:8:29",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9040,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9039,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "19900:5:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 9062,
                        "src": "19893:12:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 9038,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "19893:6:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "19892:14:29"
                  },
                  "returnParameters": {
                    "id": 9043,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9042,
                        "mutability": "mutable",
                        "name": "downcasted",
                        "nameLocation": "19937:10:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 9062,
                        "src": "19930:17:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int216",
                          "typeString": "int216"
                        },
                        "typeName": {
                          "id": 9041,
                          "name": "int216",
                          "nodeType": "ElementaryTypeName",
                          "src": "19930:6:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int216",
                            "typeString": "int216"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "19929:19:29"
                  },
                  "scope": 9779,
                  "src": "19875:224:29",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 9087,
                    "nodeType": "Block",
                    "src": "20496:150:29",
                    "statements": [
                      {
                        "expression": {
                          "id": 9075,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 9070,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9068,
                            "src": "20506:10:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int208",
                              "typeString": "int208"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 9073,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9065,
                                "src": "20526:5:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "id": 9072,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "20519:6:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_int208_$",
                                "typeString": "type(int208)"
                              },
                              "typeName": {
                                "id": 9071,
                                "name": "int208",
                                "nodeType": "ElementaryTypeName",
                                "src": "20519:6:29",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 9074,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "20519:13:29",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int208",
                              "typeString": "int208"
                            }
                          },
                          "src": "20506:26:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int208",
                            "typeString": "int208"
                          }
                        },
                        "id": 9076,
                        "nodeType": "ExpressionStatement",
                        "src": "20506:26:29"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 9079,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 9077,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9068,
                            "src": "20546:10:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int208",
                              "typeString": "int208"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 9078,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9065,
                            "src": "20560:5:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "20546:19:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 9086,
                        "nodeType": "IfStatement",
                        "src": "20542:98:29",
                        "trueBody": {
                          "id": 9085,
                          "nodeType": "Block",
                          "src": "20567:73:29",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "323038",
                                    "id": 9081,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "20618:3:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_208_by_1",
                                      "typeString": "int_const 208"
                                    },
                                    "value": "208"
                                  },
                                  {
                                    "id": 9082,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9065,
                                    "src": "20623:5:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_208_by_1",
                                      "typeString": "int_const 208"
                                    },
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 9080,
                                  "name": "SafeCastOverflowedIntDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8036,
                                  "src": "20588:29:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$",
                                    "typeString": "function (uint8,int256) pure returns (error)"
                                  }
                                },
                                "id": 9083,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "20588:41:29",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 9084,
                              "nodeType": "RevertStatement",
                              "src": "20581:48:29"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 9063,
                    "nodeType": "StructuredDocumentation",
                    "src": "20105:312:29",
                    "text": " @dev Returns the downcasted int208 from int256, reverting on\n overflow (when the input is less than smallest int208 or\n greater than largest int208).\n Counterpart to Solidity's `int208` operator.\n Requirements:\n - input must fit into 208 bits"
                  },
                  "id": 9088,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toInt208",
                  "nameLocation": "20431:8:29",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9066,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9065,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "20447:5:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 9088,
                        "src": "20440:12:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 9064,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "20440:6:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "20439:14:29"
                  },
                  "returnParameters": {
                    "id": 9069,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9068,
                        "mutability": "mutable",
                        "name": "downcasted",
                        "nameLocation": "20484:10:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 9088,
                        "src": "20477:17:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int208",
                          "typeString": "int208"
                        },
                        "typeName": {
                          "id": 9067,
                          "name": "int208",
                          "nodeType": "ElementaryTypeName",
                          "src": "20477:6:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int208",
                            "typeString": "int208"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "20476:19:29"
                  },
                  "scope": 9779,
                  "src": "20422:224:29",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 9113,
                    "nodeType": "Block",
                    "src": "21043:150:29",
                    "statements": [
                      {
                        "expression": {
                          "id": 9101,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 9096,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9094,
                            "src": "21053:10:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int200",
                              "typeString": "int200"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 9099,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9091,
                                "src": "21073:5:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "id": 9098,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "21066:6:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_int200_$",
                                "typeString": "type(int200)"
                              },
                              "typeName": {
                                "id": 9097,
                                "name": "int200",
                                "nodeType": "ElementaryTypeName",
                                "src": "21066:6:29",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 9100,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "21066:13:29",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int200",
                              "typeString": "int200"
                            }
                          },
                          "src": "21053:26:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int200",
                            "typeString": "int200"
                          }
                        },
                        "id": 9102,
                        "nodeType": "ExpressionStatement",
                        "src": "21053:26:29"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 9105,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 9103,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9094,
                            "src": "21093:10:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int200",
                              "typeString": "int200"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 9104,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9091,
                            "src": "21107:5:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "21093:19:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 9112,
                        "nodeType": "IfStatement",
                        "src": "21089:98:29",
                        "trueBody": {
                          "id": 9111,
                          "nodeType": "Block",
                          "src": "21114:73:29",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "323030",
                                    "id": 9107,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "21165:3:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_200_by_1",
                                      "typeString": "int_const 200"
                                    },
                                    "value": "200"
                                  },
                                  {
                                    "id": 9108,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9091,
                                    "src": "21170:5:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_200_by_1",
                                      "typeString": "int_const 200"
                                    },
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 9106,
                                  "name": "SafeCastOverflowedIntDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8036,
                                  "src": "21135:29:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$",
                                    "typeString": "function (uint8,int256) pure returns (error)"
                                  }
                                },
                                "id": 9109,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "21135:41:29",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 9110,
                              "nodeType": "RevertStatement",
                              "src": "21128:48:29"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 9089,
                    "nodeType": "StructuredDocumentation",
                    "src": "20652:312:29",
                    "text": " @dev Returns the downcasted int200 from int256, reverting on\n overflow (when the input is less than smallest int200 or\n greater than largest int200).\n Counterpart to Solidity's `int200` operator.\n Requirements:\n - input must fit into 200 bits"
                  },
                  "id": 9114,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toInt200",
                  "nameLocation": "20978:8:29",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9092,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9091,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "20994:5:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 9114,
                        "src": "20987:12:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 9090,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "20987:6:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "20986:14:29"
                  },
                  "returnParameters": {
                    "id": 9095,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9094,
                        "mutability": "mutable",
                        "name": "downcasted",
                        "nameLocation": "21031:10:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 9114,
                        "src": "21024:17:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int200",
                          "typeString": "int200"
                        },
                        "typeName": {
                          "id": 9093,
                          "name": "int200",
                          "nodeType": "ElementaryTypeName",
                          "src": "21024:6:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int200",
                            "typeString": "int200"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "21023:19:29"
                  },
                  "scope": 9779,
                  "src": "20969:224:29",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 9139,
                    "nodeType": "Block",
                    "src": "21590:150:29",
                    "statements": [
                      {
                        "expression": {
                          "id": 9127,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 9122,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9120,
                            "src": "21600:10:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int192",
                              "typeString": "int192"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 9125,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9117,
                                "src": "21620:5:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "id": 9124,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "21613:6:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_int192_$",
                                "typeString": "type(int192)"
                              },
                              "typeName": {
                                "id": 9123,
                                "name": "int192",
                                "nodeType": "ElementaryTypeName",
                                "src": "21613:6:29",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 9126,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "21613:13:29",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int192",
                              "typeString": "int192"
                            }
                          },
                          "src": "21600:26:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int192",
                            "typeString": "int192"
                          }
                        },
                        "id": 9128,
                        "nodeType": "ExpressionStatement",
                        "src": "21600:26:29"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 9131,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 9129,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9120,
                            "src": "21640:10:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int192",
                              "typeString": "int192"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 9130,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9117,
                            "src": "21654:5:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "21640:19:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 9138,
                        "nodeType": "IfStatement",
                        "src": "21636:98:29",
                        "trueBody": {
                          "id": 9137,
                          "nodeType": "Block",
                          "src": "21661:73:29",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "313932",
                                    "id": 9133,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "21712:3:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_192_by_1",
                                      "typeString": "int_const 192"
                                    },
                                    "value": "192"
                                  },
                                  {
                                    "id": 9134,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9117,
                                    "src": "21717:5:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_192_by_1",
                                      "typeString": "int_const 192"
                                    },
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 9132,
                                  "name": "SafeCastOverflowedIntDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8036,
                                  "src": "21682:29:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$",
                                    "typeString": "function (uint8,int256) pure returns (error)"
                                  }
                                },
                                "id": 9135,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "21682:41:29",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 9136,
                              "nodeType": "RevertStatement",
                              "src": "21675:48:29"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 9115,
                    "nodeType": "StructuredDocumentation",
                    "src": "21199:312:29",
                    "text": " @dev Returns the downcasted int192 from int256, reverting on\n overflow (when the input is less than smallest int192 or\n greater than largest int192).\n Counterpart to Solidity's `int192` operator.\n Requirements:\n - input must fit into 192 bits"
                  },
                  "id": 9140,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toInt192",
                  "nameLocation": "21525:8:29",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9118,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9117,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "21541:5:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 9140,
                        "src": "21534:12:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 9116,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "21534:6:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "21533:14:29"
                  },
                  "returnParameters": {
                    "id": 9121,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9120,
                        "mutability": "mutable",
                        "name": "downcasted",
                        "nameLocation": "21578:10:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 9140,
                        "src": "21571:17:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int192",
                          "typeString": "int192"
                        },
                        "typeName": {
                          "id": 9119,
                          "name": "int192",
                          "nodeType": "ElementaryTypeName",
                          "src": "21571:6:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int192",
                            "typeString": "int192"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "21570:19:29"
                  },
                  "scope": 9779,
                  "src": "21516:224:29",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 9165,
                    "nodeType": "Block",
                    "src": "22137:150:29",
                    "statements": [
                      {
                        "expression": {
                          "id": 9153,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 9148,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9146,
                            "src": "22147:10:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int184",
                              "typeString": "int184"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 9151,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9143,
                                "src": "22167:5:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "id": 9150,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "22160:6:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_int184_$",
                                "typeString": "type(int184)"
                              },
                              "typeName": {
                                "id": 9149,
                                "name": "int184",
                                "nodeType": "ElementaryTypeName",
                                "src": "22160:6:29",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 9152,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "22160:13:29",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int184",
                              "typeString": "int184"
                            }
                          },
                          "src": "22147:26:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int184",
                            "typeString": "int184"
                          }
                        },
                        "id": 9154,
                        "nodeType": "ExpressionStatement",
                        "src": "22147:26:29"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 9157,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 9155,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9146,
                            "src": "22187:10:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int184",
                              "typeString": "int184"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 9156,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9143,
                            "src": "22201:5:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "22187:19:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 9164,
                        "nodeType": "IfStatement",
                        "src": "22183:98:29",
                        "trueBody": {
                          "id": 9163,
                          "nodeType": "Block",
                          "src": "22208:73:29",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "313834",
                                    "id": 9159,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "22259:3:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_184_by_1",
                                      "typeString": "int_const 184"
                                    },
                                    "value": "184"
                                  },
                                  {
                                    "id": 9160,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9143,
                                    "src": "22264:5:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_184_by_1",
                                      "typeString": "int_const 184"
                                    },
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 9158,
                                  "name": "SafeCastOverflowedIntDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8036,
                                  "src": "22229:29:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$",
                                    "typeString": "function (uint8,int256) pure returns (error)"
                                  }
                                },
                                "id": 9161,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "22229:41:29",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 9162,
                              "nodeType": "RevertStatement",
                              "src": "22222:48:29"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 9141,
                    "nodeType": "StructuredDocumentation",
                    "src": "21746:312:29",
                    "text": " @dev Returns the downcasted int184 from int256, reverting on\n overflow (when the input is less than smallest int184 or\n greater than largest int184).\n Counterpart to Solidity's `int184` operator.\n Requirements:\n - input must fit into 184 bits"
                  },
                  "id": 9166,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toInt184",
                  "nameLocation": "22072:8:29",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9144,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9143,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "22088:5:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 9166,
                        "src": "22081:12:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 9142,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "22081:6:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "22080:14:29"
                  },
                  "returnParameters": {
                    "id": 9147,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9146,
                        "mutability": "mutable",
                        "name": "downcasted",
                        "nameLocation": "22125:10:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 9166,
                        "src": "22118:17:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int184",
                          "typeString": "int184"
                        },
                        "typeName": {
                          "id": 9145,
                          "name": "int184",
                          "nodeType": "ElementaryTypeName",
                          "src": "22118:6:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int184",
                            "typeString": "int184"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "22117:19:29"
                  },
                  "scope": 9779,
                  "src": "22063:224:29",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 9191,
                    "nodeType": "Block",
                    "src": "22684:150:29",
                    "statements": [
                      {
                        "expression": {
                          "id": 9179,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 9174,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9172,
                            "src": "22694:10:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int176",
                              "typeString": "int176"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 9177,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9169,
                                "src": "22714:5:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "id": 9176,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "22707:6:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_int176_$",
                                "typeString": "type(int176)"
                              },
                              "typeName": {
                                "id": 9175,
                                "name": "int176",
                                "nodeType": "ElementaryTypeName",
                                "src": "22707:6:29",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 9178,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "22707:13:29",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int176",
                              "typeString": "int176"
                            }
                          },
                          "src": "22694:26:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int176",
                            "typeString": "int176"
                          }
                        },
                        "id": 9180,
                        "nodeType": "ExpressionStatement",
                        "src": "22694:26:29"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 9183,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 9181,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9172,
                            "src": "22734:10:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int176",
                              "typeString": "int176"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 9182,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9169,
                            "src": "22748:5:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "22734:19:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 9190,
                        "nodeType": "IfStatement",
                        "src": "22730:98:29",
                        "trueBody": {
                          "id": 9189,
                          "nodeType": "Block",
                          "src": "22755:73:29",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "313736",
                                    "id": 9185,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "22806:3:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_176_by_1",
                                      "typeString": "int_const 176"
                                    },
                                    "value": "176"
                                  },
                                  {
                                    "id": 9186,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9169,
                                    "src": "22811:5:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_176_by_1",
                                      "typeString": "int_const 176"
                                    },
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 9184,
                                  "name": "SafeCastOverflowedIntDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8036,
                                  "src": "22776:29:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$",
                                    "typeString": "function (uint8,int256) pure returns (error)"
                                  }
                                },
                                "id": 9187,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "22776:41:29",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 9188,
                              "nodeType": "RevertStatement",
                              "src": "22769:48:29"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 9167,
                    "nodeType": "StructuredDocumentation",
                    "src": "22293:312:29",
                    "text": " @dev Returns the downcasted int176 from int256, reverting on\n overflow (when the input is less than smallest int176 or\n greater than largest int176).\n Counterpart to Solidity's `int176` operator.\n Requirements:\n - input must fit into 176 bits"
                  },
                  "id": 9192,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toInt176",
                  "nameLocation": "22619:8:29",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9170,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9169,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "22635:5:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 9192,
                        "src": "22628:12:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 9168,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "22628:6:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "22627:14:29"
                  },
                  "returnParameters": {
                    "id": 9173,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9172,
                        "mutability": "mutable",
                        "name": "downcasted",
                        "nameLocation": "22672:10:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 9192,
                        "src": "22665:17:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int176",
                          "typeString": "int176"
                        },
                        "typeName": {
                          "id": 9171,
                          "name": "int176",
                          "nodeType": "ElementaryTypeName",
                          "src": "22665:6:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int176",
                            "typeString": "int176"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "22664:19:29"
                  },
                  "scope": 9779,
                  "src": "22610:224:29",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 9217,
                    "nodeType": "Block",
                    "src": "23231:150:29",
                    "statements": [
                      {
                        "expression": {
                          "id": 9205,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 9200,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9198,
                            "src": "23241:10:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int168",
                              "typeString": "int168"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 9203,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9195,
                                "src": "23261:5:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "id": 9202,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "23254:6:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_int168_$",
                                "typeString": "type(int168)"
                              },
                              "typeName": {
                                "id": 9201,
                                "name": "int168",
                                "nodeType": "ElementaryTypeName",
                                "src": "23254:6:29",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 9204,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "23254:13:29",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int168",
                              "typeString": "int168"
                            }
                          },
                          "src": "23241:26:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int168",
                            "typeString": "int168"
                          }
                        },
                        "id": 9206,
                        "nodeType": "ExpressionStatement",
                        "src": "23241:26:29"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 9209,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 9207,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9198,
                            "src": "23281:10:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int168",
                              "typeString": "int168"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 9208,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9195,
                            "src": "23295:5:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "23281:19:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 9216,
                        "nodeType": "IfStatement",
                        "src": "23277:98:29",
                        "trueBody": {
                          "id": 9215,
                          "nodeType": "Block",
                          "src": "23302:73:29",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "313638",
                                    "id": 9211,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "23353:3:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_168_by_1",
                                      "typeString": "int_const 168"
                                    },
                                    "value": "168"
                                  },
                                  {
                                    "id": 9212,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9195,
                                    "src": "23358:5:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_168_by_1",
                                      "typeString": "int_const 168"
                                    },
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 9210,
                                  "name": "SafeCastOverflowedIntDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8036,
                                  "src": "23323:29:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$",
                                    "typeString": "function (uint8,int256) pure returns (error)"
                                  }
                                },
                                "id": 9213,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "23323:41:29",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 9214,
                              "nodeType": "RevertStatement",
                              "src": "23316:48:29"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 9193,
                    "nodeType": "StructuredDocumentation",
                    "src": "22840:312:29",
                    "text": " @dev Returns the downcasted int168 from int256, reverting on\n overflow (when the input is less than smallest int168 or\n greater than largest int168).\n Counterpart to Solidity's `int168` operator.\n Requirements:\n - input must fit into 168 bits"
                  },
                  "id": 9218,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toInt168",
                  "nameLocation": "23166:8:29",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9196,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9195,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "23182:5:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 9218,
                        "src": "23175:12:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 9194,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "23175:6:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "23174:14:29"
                  },
                  "returnParameters": {
                    "id": 9199,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9198,
                        "mutability": "mutable",
                        "name": "downcasted",
                        "nameLocation": "23219:10:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 9218,
                        "src": "23212:17:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int168",
                          "typeString": "int168"
                        },
                        "typeName": {
                          "id": 9197,
                          "name": "int168",
                          "nodeType": "ElementaryTypeName",
                          "src": "23212:6:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int168",
                            "typeString": "int168"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "23211:19:29"
                  },
                  "scope": 9779,
                  "src": "23157:224:29",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 9243,
                    "nodeType": "Block",
                    "src": "23778:150:29",
                    "statements": [
                      {
                        "expression": {
                          "id": 9231,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 9226,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9224,
                            "src": "23788:10:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int160",
                              "typeString": "int160"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 9229,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9221,
                                "src": "23808:5:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "id": 9228,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "23801:6:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_int160_$",
                                "typeString": "type(int160)"
                              },
                              "typeName": {
                                "id": 9227,
                                "name": "int160",
                                "nodeType": "ElementaryTypeName",
                                "src": "23801:6:29",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 9230,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "23801:13:29",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int160",
                              "typeString": "int160"
                            }
                          },
                          "src": "23788:26:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int160",
                            "typeString": "int160"
                          }
                        },
                        "id": 9232,
                        "nodeType": "ExpressionStatement",
                        "src": "23788:26:29"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 9235,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 9233,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9224,
                            "src": "23828:10:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int160",
                              "typeString": "int160"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 9234,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9221,
                            "src": "23842:5:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "23828:19:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 9242,
                        "nodeType": "IfStatement",
                        "src": "23824:98:29",
                        "trueBody": {
                          "id": 9241,
                          "nodeType": "Block",
                          "src": "23849:73:29",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "313630",
                                    "id": 9237,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "23900:3:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_160_by_1",
                                      "typeString": "int_const 160"
                                    },
                                    "value": "160"
                                  },
                                  {
                                    "id": 9238,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9221,
                                    "src": "23905:5:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_160_by_1",
                                      "typeString": "int_const 160"
                                    },
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 9236,
                                  "name": "SafeCastOverflowedIntDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8036,
                                  "src": "23870:29:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$",
                                    "typeString": "function (uint8,int256) pure returns (error)"
                                  }
                                },
                                "id": 9239,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "23870:41:29",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 9240,
                              "nodeType": "RevertStatement",
                              "src": "23863:48:29"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 9219,
                    "nodeType": "StructuredDocumentation",
                    "src": "23387:312:29",
                    "text": " @dev Returns the downcasted int160 from int256, reverting on\n overflow (when the input is less than smallest int160 or\n greater than largest int160).\n Counterpart to Solidity's `int160` operator.\n Requirements:\n - input must fit into 160 bits"
                  },
                  "id": 9244,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toInt160",
                  "nameLocation": "23713:8:29",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9222,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9221,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "23729:5:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 9244,
                        "src": "23722:12:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 9220,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "23722:6:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "23721:14:29"
                  },
                  "returnParameters": {
                    "id": 9225,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9224,
                        "mutability": "mutable",
                        "name": "downcasted",
                        "nameLocation": "23766:10:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 9244,
                        "src": "23759:17:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int160",
                          "typeString": "int160"
                        },
                        "typeName": {
                          "id": 9223,
                          "name": "int160",
                          "nodeType": "ElementaryTypeName",
                          "src": "23759:6:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int160",
                            "typeString": "int160"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "23758:19:29"
                  },
                  "scope": 9779,
                  "src": "23704:224:29",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 9269,
                    "nodeType": "Block",
                    "src": "24325:150:29",
                    "statements": [
                      {
                        "expression": {
                          "id": 9257,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 9252,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9250,
                            "src": "24335:10:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int152",
                              "typeString": "int152"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 9255,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9247,
                                "src": "24355:5:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "id": 9254,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "24348:6:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_int152_$",
                                "typeString": "type(int152)"
                              },
                              "typeName": {
                                "id": 9253,
                                "name": "int152",
                                "nodeType": "ElementaryTypeName",
                                "src": "24348:6:29",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 9256,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "24348:13:29",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int152",
                              "typeString": "int152"
                            }
                          },
                          "src": "24335:26:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int152",
                            "typeString": "int152"
                          }
                        },
                        "id": 9258,
                        "nodeType": "ExpressionStatement",
                        "src": "24335:26:29"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 9261,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 9259,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9250,
                            "src": "24375:10:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int152",
                              "typeString": "int152"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 9260,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9247,
                            "src": "24389:5:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "24375:19:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 9268,
                        "nodeType": "IfStatement",
                        "src": "24371:98:29",
                        "trueBody": {
                          "id": 9267,
                          "nodeType": "Block",
                          "src": "24396:73:29",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "313532",
                                    "id": 9263,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "24447:3:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_152_by_1",
                                      "typeString": "int_const 152"
                                    },
                                    "value": "152"
                                  },
                                  {
                                    "id": 9264,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9247,
                                    "src": "24452:5:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_152_by_1",
                                      "typeString": "int_const 152"
                                    },
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 9262,
                                  "name": "SafeCastOverflowedIntDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8036,
                                  "src": "24417:29:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$",
                                    "typeString": "function (uint8,int256) pure returns (error)"
                                  }
                                },
                                "id": 9265,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "24417:41:29",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 9266,
                              "nodeType": "RevertStatement",
                              "src": "24410:48:29"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 9245,
                    "nodeType": "StructuredDocumentation",
                    "src": "23934:312:29",
                    "text": " @dev Returns the downcasted int152 from int256, reverting on\n overflow (when the input is less than smallest int152 or\n greater than largest int152).\n Counterpart to Solidity's `int152` operator.\n Requirements:\n - input must fit into 152 bits"
                  },
                  "id": 9270,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toInt152",
                  "nameLocation": "24260:8:29",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9248,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9247,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "24276:5:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 9270,
                        "src": "24269:12:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 9246,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "24269:6:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "24268:14:29"
                  },
                  "returnParameters": {
                    "id": 9251,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9250,
                        "mutability": "mutable",
                        "name": "downcasted",
                        "nameLocation": "24313:10:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 9270,
                        "src": "24306:17:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int152",
                          "typeString": "int152"
                        },
                        "typeName": {
                          "id": 9249,
                          "name": "int152",
                          "nodeType": "ElementaryTypeName",
                          "src": "24306:6:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int152",
                            "typeString": "int152"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "24305:19:29"
                  },
                  "scope": 9779,
                  "src": "24251:224:29",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 9295,
                    "nodeType": "Block",
                    "src": "24872:150:29",
                    "statements": [
                      {
                        "expression": {
                          "id": 9283,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 9278,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9276,
                            "src": "24882:10:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int144",
                              "typeString": "int144"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 9281,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9273,
                                "src": "24902:5:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "id": 9280,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "24895:6:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_int144_$",
                                "typeString": "type(int144)"
                              },
                              "typeName": {
                                "id": 9279,
                                "name": "int144",
                                "nodeType": "ElementaryTypeName",
                                "src": "24895:6:29",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 9282,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "24895:13:29",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int144",
                              "typeString": "int144"
                            }
                          },
                          "src": "24882:26:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int144",
                            "typeString": "int144"
                          }
                        },
                        "id": 9284,
                        "nodeType": "ExpressionStatement",
                        "src": "24882:26:29"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 9287,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 9285,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9276,
                            "src": "24922:10:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int144",
                              "typeString": "int144"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 9286,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9273,
                            "src": "24936:5:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "24922:19:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 9294,
                        "nodeType": "IfStatement",
                        "src": "24918:98:29",
                        "trueBody": {
                          "id": 9293,
                          "nodeType": "Block",
                          "src": "24943:73:29",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "313434",
                                    "id": 9289,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "24994:3:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_144_by_1",
                                      "typeString": "int_const 144"
                                    },
                                    "value": "144"
                                  },
                                  {
                                    "id": 9290,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9273,
                                    "src": "24999:5:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_144_by_1",
                                      "typeString": "int_const 144"
                                    },
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 9288,
                                  "name": "SafeCastOverflowedIntDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8036,
                                  "src": "24964:29:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$",
                                    "typeString": "function (uint8,int256) pure returns (error)"
                                  }
                                },
                                "id": 9291,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "24964:41:29",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 9292,
                              "nodeType": "RevertStatement",
                              "src": "24957:48:29"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 9271,
                    "nodeType": "StructuredDocumentation",
                    "src": "24481:312:29",
                    "text": " @dev Returns the downcasted int144 from int256, reverting on\n overflow (when the input is less than smallest int144 or\n greater than largest int144).\n Counterpart to Solidity's `int144` operator.\n Requirements:\n - input must fit into 144 bits"
                  },
                  "id": 9296,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toInt144",
                  "nameLocation": "24807:8:29",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9274,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9273,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "24823:5:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 9296,
                        "src": "24816:12:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 9272,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "24816:6:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "24815:14:29"
                  },
                  "returnParameters": {
                    "id": 9277,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9276,
                        "mutability": "mutable",
                        "name": "downcasted",
                        "nameLocation": "24860:10:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 9296,
                        "src": "24853:17:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int144",
                          "typeString": "int144"
                        },
                        "typeName": {
                          "id": 9275,
                          "name": "int144",
                          "nodeType": "ElementaryTypeName",
                          "src": "24853:6:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int144",
                            "typeString": "int144"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "24852:19:29"
                  },
                  "scope": 9779,
                  "src": "24798:224:29",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 9321,
                    "nodeType": "Block",
                    "src": "25419:150:29",
                    "statements": [
                      {
                        "expression": {
                          "id": 9309,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 9304,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9302,
                            "src": "25429:10:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int136",
                              "typeString": "int136"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 9307,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9299,
                                "src": "25449:5:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "id": 9306,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "25442:6:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_int136_$",
                                "typeString": "type(int136)"
                              },
                              "typeName": {
                                "id": 9305,
                                "name": "int136",
                                "nodeType": "ElementaryTypeName",
                                "src": "25442:6:29",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 9308,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "25442:13:29",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int136",
                              "typeString": "int136"
                            }
                          },
                          "src": "25429:26:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int136",
                            "typeString": "int136"
                          }
                        },
                        "id": 9310,
                        "nodeType": "ExpressionStatement",
                        "src": "25429:26:29"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 9313,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 9311,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9302,
                            "src": "25469:10:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int136",
                              "typeString": "int136"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 9312,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9299,
                            "src": "25483:5:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "25469:19:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 9320,
                        "nodeType": "IfStatement",
                        "src": "25465:98:29",
                        "trueBody": {
                          "id": 9319,
                          "nodeType": "Block",
                          "src": "25490:73:29",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "313336",
                                    "id": 9315,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "25541:3:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_136_by_1",
                                      "typeString": "int_const 136"
                                    },
                                    "value": "136"
                                  },
                                  {
                                    "id": 9316,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9299,
                                    "src": "25546:5:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_136_by_1",
                                      "typeString": "int_const 136"
                                    },
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 9314,
                                  "name": "SafeCastOverflowedIntDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8036,
                                  "src": "25511:29:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$",
                                    "typeString": "function (uint8,int256) pure returns (error)"
                                  }
                                },
                                "id": 9317,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "25511:41:29",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 9318,
                              "nodeType": "RevertStatement",
                              "src": "25504:48:29"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 9297,
                    "nodeType": "StructuredDocumentation",
                    "src": "25028:312:29",
                    "text": " @dev Returns the downcasted int136 from int256, reverting on\n overflow (when the input is less than smallest int136 or\n greater than largest int136).\n Counterpart to Solidity's `int136` operator.\n Requirements:\n - input must fit into 136 bits"
                  },
                  "id": 9322,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toInt136",
                  "nameLocation": "25354:8:29",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9300,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9299,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "25370:5:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 9322,
                        "src": "25363:12:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 9298,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "25363:6:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "25362:14:29"
                  },
                  "returnParameters": {
                    "id": 9303,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9302,
                        "mutability": "mutable",
                        "name": "downcasted",
                        "nameLocation": "25407:10:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 9322,
                        "src": "25400:17:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int136",
                          "typeString": "int136"
                        },
                        "typeName": {
                          "id": 9301,
                          "name": "int136",
                          "nodeType": "ElementaryTypeName",
                          "src": "25400:6:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int136",
                            "typeString": "int136"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "25399:19:29"
                  },
                  "scope": 9779,
                  "src": "25345:224:29",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 9347,
                    "nodeType": "Block",
                    "src": "25966:150:29",
                    "statements": [
                      {
                        "expression": {
                          "id": 9335,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 9330,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9328,
                            "src": "25976:10:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int128",
                              "typeString": "int128"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 9333,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9325,
                                "src": "25996:5:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "id": 9332,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "25989:6:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_int128_$",
                                "typeString": "type(int128)"
                              },
                              "typeName": {
                                "id": 9331,
                                "name": "int128",
                                "nodeType": "ElementaryTypeName",
                                "src": "25989:6:29",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 9334,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "25989:13:29",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int128",
                              "typeString": "int128"
                            }
                          },
                          "src": "25976:26:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int128",
                            "typeString": "int128"
                          }
                        },
                        "id": 9336,
                        "nodeType": "ExpressionStatement",
                        "src": "25976:26:29"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 9339,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 9337,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9328,
                            "src": "26016:10:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int128",
                              "typeString": "int128"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 9338,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9325,
                            "src": "26030:5:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "26016:19:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 9346,
                        "nodeType": "IfStatement",
                        "src": "26012:98:29",
                        "trueBody": {
                          "id": 9345,
                          "nodeType": "Block",
                          "src": "26037:73:29",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "313238",
                                    "id": 9341,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "26088:3:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_128_by_1",
                                      "typeString": "int_const 128"
                                    },
                                    "value": "128"
                                  },
                                  {
                                    "id": 9342,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9325,
                                    "src": "26093:5:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_128_by_1",
                                      "typeString": "int_const 128"
                                    },
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 9340,
                                  "name": "SafeCastOverflowedIntDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8036,
                                  "src": "26058:29:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$",
                                    "typeString": "function (uint8,int256) pure returns (error)"
                                  }
                                },
                                "id": 9343,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "26058:41:29",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 9344,
                              "nodeType": "RevertStatement",
                              "src": "26051:48:29"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 9323,
                    "nodeType": "StructuredDocumentation",
                    "src": "25575:312:29",
                    "text": " @dev Returns the downcasted int128 from int256, reverting on\n overflow (when the input is less than smallest int128 or\n greater than largest int128).\n Counterpart to Solidity's `int128` operator.\n Requirements:\n - input must fit into 128 bits"
                  },
                  "id": 9348,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toInt128",
                  "nameLocation": "25901:8:29",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9326,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9325,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "25917:5:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 9348,
                        "src": "25910:12:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 9324,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "25910:6:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "25909:14:29"
                  },
                  "returnParameters": {
                    "id": 9329,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9328,
                        "mutability": "mutable",
                        "name": "downcasted",
                        "nameLocation": "25954:10:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 9348,
                        "src": "25947:17:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int128",
                          "typeString": "int128"
                        },
                        "typeName": {
                          "id": 9327,
                          "name": "int128",
                          "nodeType": "ElementaryTypeName",
                          "src": "25947:6:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int128",
                            "typeString": "int128"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "25946:19:29"
                  },
                  "scope": 9779,
                  "src": "25892:224:29",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 9373,
                    "nodeType": "Block",
                    "src": "26513:150:29",
                    "statements": [
                      {
                        "expression": {
                          "id": 9361,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 9356,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9354,
                            "src": "26523:10:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int120",
                              "typeString": "int120"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 9359,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9351,
                                "src": "26543:5:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "id": 9358,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "26536:6:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_int120_$",
                                "typeString": "type(int120)"
                              },
                              "typeName": {
                                "id": 9357,
                                "name": "int120",
                                "nodeType": "ElementaryTypeName",
                                "src": "26536:6:29",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 9360,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "26536:13:29",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int120",
                              "typeString": "int120"
                            }
                          },
                          "src": "26523:26:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int120",
                            "typeString": "int120"
                          }
                        },
                        "id": 9362,
                        "nodeType": "ExpressionStatement",
                        "src": "26523:26:29"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 9365,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 9363,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9354,
                            "src": "26563:10:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int120",
                              "typeString": "int120"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 9364,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9351,
                            "src": "26577:5:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "26563:19:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 9372,
                        "nodeType": "IfStatement",
                        "src": "26559:98:29",
                        "trueBody": {
                          "id": 9371,
                          "nodeType": "Block",
                          "src": "26584:73:29",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "313230",
                                    "id": 9367,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "26635:3:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_120_by_1",
                                      "typeString": "int_const 120"
                                    },
                                    "value": "120"
                                  },
                                  {
                                    "id": 9368,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9351,
                                    "src": "26640:5:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_120_by_1",
                                      "typeString": "int_const 120"
                                    },
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 9366,
                                  "name": "SafeCastOverflowedIntDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8036,
                                  "src": "26605:29:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$",
                                    "typeString": "function (uint8,int256) pure returns (error)"
                                  }
                                },
                                "id": 9369,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "26605:41:29",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 9370,
                              "nodeType": "RevertStatement",
                              "src": "26598:48:29"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 9349,
                    "nodeType": "StructuredDocumentation",
                    "src": "26122:312:29",
                    "text": " @dev Returns the downcasted int120 from int256, reverting on\n overflow (when the input is less than smallest int120 or\n greater than largest int120).\n Counterpart to Solidity's `int120` operator.\n Requirements:\n - input must fit into 120 bits"
                  },
                  "id": 9374,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toInt120",
                  "nameLocation": "26448:8:29",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9352,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9351,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "26464:5:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 9374,
                        "src": "26457:12:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 9350,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "26457:6:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "26456:14:29"
                  },
                  "returnParameters": {
                    "id": 9355,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9354,
                        "mutability": "mutable",
                        "name": "downcasted",
                        "nameLocation": "26501:10:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 9374,
                        "src": "26494:17:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int120",
                          "typeString": "int120"
                        },
                        "typeName": {
                          "id": 9353,
                          "name": "int120",
                          "nodeType": "ElementaryTypeName",
                          "src": "26494:6:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int120",
                            "typeString": "int120"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "26493:19:29"
                  },
                  "scope": 9779,
                  "src": "26439:224:29",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 9399,
                    "nodeType": "Block",
                    "src": "27060:150:29",
                    "statements": [
                      {
                        "expression": {
                          "id": 9387,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 9382,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9380,
                            "src": "27070:10:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int112",
                              "typeString": "int112"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 9385,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9377,
                                "src": "27090:5:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "id": 9384,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "27083:6:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_int112_$",
                                "typeString": "type(int112)"
                              },
                              "typeName": {
                                "id": 9383,
                                "name": "int112",
                                "nodeType": "ElementaryTypeName",
                                "src": "27083:6:29",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 9386,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "27083:13:29",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int112",
                              "typeString": "int112"
                            }
                          },
                          "src": "27070:26:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int112",
                            "typeString": "int112"
                          }
                        },
                        "id": 9388,
                        "nodeType": "ExpressionStatement",
                        "src": "27070:26:29"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 9391,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 9389,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9380,
                            "src": "27110:10:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int112",
                              "typeString": "int112"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 9390,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9377,
                            "src": "27124:5:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "27110:19:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 9398,
                        "nodeType": "IfStatement",
                        "src": "27106:98:29",
                        "trueBody": {
                          "id": 9397,
                          "nodeType": "Block",
                          "src": "27131:73:29",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "313132",
                                    "id": 9393,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "27182:3:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_112_by_1",
                                      "typeString": "int_const 112"
                                    },
                                    "value": "112"
                                  },
                                  {
                                    "id": 9394,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9377,
                                    "src": "27187:5:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_112_by_1",
                                      "typeString": "int_const 112"
                                    },
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 9392,
                                  "name": "SafeCastOverflowedIntDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8036,
                                  "src": "27152:29:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$",
                                    "typeString": "function (uint8,int256) pure returns (error)"
                                  }
                                },
                                "id": 9395,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "27152:41:29",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 9396,
                              "nodeType": "RevertStatement",
                              "src": "27145:48:29"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 9375,
                    "nodeType": "StructuredDocumentation",
                    "src": "26669:312:29",
                    "text": " @dev Returns the downcasted int112 from int256, reverting on\n overflow (when the input is less than smallest int112 or\n greater than largest int112).\n Counterpart to Solidity's `int112` operator.\n Requirements:\n - input must fit into 112 bits"
                  },
                  "id": 9400,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toInt112",
                  "nameLocation": "26995:8:29",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9378,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9377,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "27011:5:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 9400,
                        "src": "27004:12:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 9376,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "27004:6:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "27003:14:29"
                  },
                  "returnParameters": {
                    "id": 9381,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9380,
                        "mutability": "mutable",
                        "name": "downcasted",
                        "nameLocation": "27048:10:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 9400,
                        "src": "27041:17:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int112",
                          "typeString": "int112"
                        },
                        "typeName": {
                          "id": 9379,
                          "name": "int112",
                          "nodeType": "ElementaryTypeName",
                          "src": "27041:6:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int112",
                            "typeString": "int112"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "27040:19:29"
                  },
                  "scope": 9779,
                  "src": "26986:224:29",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 9425,
                    "nodeType": "Block",
                    "src": "27607:150:29",
                    "statements": [
                      {
                        "expression": {
                          "id": 9413,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 9408,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9406,
                            "src": "27617:10:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int104",
                              "typeString": "int104"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 9411,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9403,
                                "src": "27637:5:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "id": 9410,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "27630:6:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_int104_$",
                                "typeString": "type(int104)"
                              },
                              "typeName": {
                                "id": 9409,
                                "name": "int104",
                                "nodeType": "ElementaryTypeName",
                                "src": "27630:6:29",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 9412,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "27630:13:29",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int104",
                              "typeString": "int104"
                            }
                          },
                          "src": "27617:26:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int104",
                            "typeString": "int104"
                          }
                        },
                        "id": 9414,
                        "nodeType": "ExpressionStatement",
                        "src": "27617:26:29"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 9417,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 9415,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9406,
                            "src": "27657:10:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int104",
                              "typeString": "int104"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 9416,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9403,
                            "src": "27671:5:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "27657:19:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 9424,
                        "nodeType": "IfStatement",
                        "src": "27653:98:29",
                        "trueBody": {
                          "id": 9423,
                          "nodeType": "Block",
                          "src": "27678:73:29",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "313034",
                                    "id": 9419,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "27729:3:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_104_by_1",
                                      "typeString": "int_const 104"
                                    },
                                    "value": "104"
                                  },
                                  {
                                    "id": 9420,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9403,
                                    "src": "27734:5:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_104_by_1",
                                      "typeString": "int_const 104"
                                    },
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 9418,
                                  "name": "SafeCastOverflowedIntDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8036,
                                  "src": "27699:29:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$",
                                    "typeString": "function (uint8,int256) pure returns (error)"
                                  }
                                },
                                "id": 9421,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "27699:41:29",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 9422,
                              "nodeType": "RevertStatement",
                              "src": "27692:48:29"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 9401,
                    "nodeType": "StructuredDocumentation",
                    "src": "27216:312:29",
                    "text": " @dev Returns the downcasted int104 from int256, reverting on\n overflow (when the input is less than smallest int104 or\n greater than largest int104).\n Counterpart to Solidity's `int104` operator.\n Requirements:\n - input must fit into 104 bits"
                  },
                  "id": 9426,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toInt104",
                  "nameLocation": "27542:8:29",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9404,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9403,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "27558:5:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 9426,
                        "src": "27551:12:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 9402,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "27551:6:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "27550:14:29"
                  },
                  "returnParameters": {
                    "id": 9407,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9406,
                        "mutability": "mutable",
                        "name": "downcasted",
                        "nameLocation": "27595:10:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 9426,
                        "src": "27588:17:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int104",
                          "typeString": "int104"
                        },
                        "typeName": {
                          "id": 9405,
                          "name": "int104",
                          "nodeType": "ElementaryTypeName",
                          "src": "27588:6:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int104",
                            "typeString": "int104"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "27587:19:29"
                  },
                  "scope": 9779,
                  "src": "27533:224:29",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 9451,
                    "nodeType": "Block",
                    "src": "28147:148:29",
                    "statements": [
                      {
                        "expression": {
                          "id": 9439,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 9434,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9432,
                            "src": "28157:10:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int96",
                              "typeString": "int96"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 9437,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9429,
                                "src": "28176:5:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "id": 9436,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "28170:5:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_int96_$",
                                "typeString": "type(int96)"
                              },
                              "typeName": {
                                "id": 9435,
                                "name": "int96",
                                "nodeType": "ElementaryTypeName",
                                "src": "28170:5:29",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 9438,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "28170:12:29",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int96",
                              "typeString": "int96"
                            }
                          },
                          "src": "28157:25:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int96",
                            "typeString": "int96"
                          }
                        },
                        "id": 9440,
                        "nodeType": "ExpressionStatement",
                        "src": "28157:25:29"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 9443,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 9441,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9432,
                            "src": "28196:10:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int96",
                              "typeString": "int96"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 9442,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9429,
                            "src": "28210:5:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "28196:19:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 9450,
                        "nodeType": "IfStatement",
                        "src": "28192:97:29",
                        "trueBody": {
                          "id": 9449,
                          "nodeType": "Block",
                          "src": "28217:72:29",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "3936",
                                    "id": 9445,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "28268:2:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_96_by_1",
                                      "typeString": "int_const 96"
                                    },
                                    "value": "96"
                                  },
                                  {
                                    "id": 9446,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9429,
                                    "src": "28272:5:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_96_by_1",
                                      "typeString": "int_const 96"
                                    },
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 9444,
                                  "name": "SafeCastOverflowedIntDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8036,
                                  "src": "28238:29:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$",
                                    "typeString": "function (uint8,int256) pure returns (error)"
                                  }
                                },
                                "id": 9447,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "28238:40:29",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 9448,
                              "nodeType": "RevertStatement",
                              "src": "28231:47:29"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 9427,
                    "nodeType": "StructuredDocumentation",
                    "src": "27763:307:29",
                    "text": " @dev Returns the downcasted int96 from int256, reverting on\n overflow (when the input is less than smallest int96 or\n greater than largest int96).\n Counterpart to Solidity's `int96` operator.\n Requirements:\n - input must fit into 96 bits"
                  },
                  "id": 9452,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toInt96",
                  "nameLocation": "28084:7:29",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9430,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9429,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "28099:5:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 9452,
                        "src": "28092:12:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 9428,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "28092:6:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "28091:14:29"
                  },
                  "returnParameters": {
                    "id": 9433,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9432,
                        "mutability": "mutable",
                        "name": "downcasted",
                        "nameLocation": "28135:10:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 9452,
                        "src": "28129:16:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int96",
                          "typeString": "int96"
                        },
                        "typeName": {
                          "id": 9431,
                          "name": "int96",
                          "nodeType": "ElementaryTypeName",
                          "src": "28129:5:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int96",
                            "typeString": "int96"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "28128:18:29"
                  },
                  "scope": 9779,
                  "src": "28075:220:29",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 9477,
                    "nodeType": "Block",
                    "src": "28685:148:29",
                    "statements": [
                      {
                        "expression": {
                          "id": 9465,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 9460,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9458,
                            "src": "28695:10:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int88",
                              "typeString": "int88"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 9463,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9455,
                                "src": "28714:5:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "id": 9462,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "28708:5:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_int88_$",
                                "typeString": "type(int88)"
                              },
                              "typeName": {
                                "id": 9461,
                                "name": "int88",
                                "nodeType": "ElementaryTypeName",
                                "src": "28708:5:29",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 9464,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "28708:12:29",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int88",
                              "typeString": "int88"
                            }
                          },
                          "src": "28695:25:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int88",
                            "typeString": "int88"
                          }
                        },
                        "id": 9466,
                        "nodeType": "ExpressionStatement",
                        "src": "28695:25:29"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 9469,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 9467,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9458,
                            "src": "28734:10:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int88",
                              "typeString": "int88"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 9468,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9455,
                            "src": "28748:5:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "28734:19:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 9476,
                        "nodeType": "IfStatement",
                        "src": "28730:97:29",
                        "trueBody": {
                          "id": 9475,
                          "nodeType": "Block",
                          "src": "28755:72:29",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "3838",
                                    "id": 9471,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "28806:2:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_88_by_1",
                                      "typeString": "int_const 88"
                                    },
                                    "value": "88"
                                  },
                                  {
                                    "id": 9472,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9455,
                                    "src": "28810:5:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_88_by_1",
                                      "typeString": "int_const 88"
                                    },
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 9470,
                                  "name": "SafeCastOverflowedIntDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8036,
                                  "src": "28776:29:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$",
                                    "typeString": "function (uint8,int256) pure returns (error)"
                                  }
                                },
                                "id": 9473,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "28776:40:29",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 9474,
                              "nodeType": "RevertStatement",
                              "src": "28769:47:29"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 9453,
                    "nodeType": "StructuredDocumentation",
                    "src": "28301:307:29",
                    "text": " @dev Returns the downcasted int88 from int256, reverting on\n overflow (when the input is less than smallest int88 or\n greater than largest int88).\n Counterpart to Solidity's `int88` operator.\n Requirements:\n - input must fit into 88 bits"
                  },
                  "id": 9478,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toInt88",
                  "nameLocation": "28622:7:29",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9456,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9455,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "28637:5:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 9478,
                        "src": "28630:12:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 9454,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "28630:6:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "28629:14:29"
                  },
                  "returnParameters": {
                    "id": 9459,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9458,
                        "mutability": "mutable",
                        "name": "downcasted",
                        "nameLocation": "28673:10:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 9478,
                        "src": "28667:16:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int88",
                          "typeString": "int88"
                        },
                        "typeName": {
                          "id": 9457,
                          "name": "int88",
                          "nodeType": "ElementaryTypeName",
                          "src": "28667:5:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int88",
                            "typeString": "int88"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "28666:18:29"
                  },
                  "scope": 9779,
                  "src": "28613:220:29",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 9503,
                    "nodeType": "Block",
                    "src": "29223:148:29",
                    "statements": [
                      {
                        "expression": {
                          "id": 9491,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 9486,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9484,
                            "src": "29233:10:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int80",
                              "typeString": "int80"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 9489,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9481,
                                "src": "29252:5:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "id": 9488,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "29246:5:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_int80_$",
                                "typeString": "type(int80)"
                              },
                              "typeName": {
                                "id": 9487,
                                "name": "int80",
                                "nodeType": "ElementaryTypeName",
                                "src": "29246:5:29",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 9490,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "29246:12:29",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int80",
                              "typeString": "int80"
                            }
                          },
                          "src": "29233:25:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int80",
                            "typeString": "int80"
                          }
                        },
                        "id": 9492,
                        "nodeType": "ExpressionStatement",
                        "src": "29233:25:29"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 9495,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 9493,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9484,
                            "src": "29272:10:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int80",
                              "typeString": "int80"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 9494,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9481,
                            "src": "29286:5:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "29272:19:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 9502,
                        "nodeType": "IfStatement",
                        "src": "29268:97:29",
                        "trueBody": {
                          "id": 9501,
                          "nodeType": "Block",
                          "src": "29293:72:29",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "3830",
                                    "id": 9497,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "29344:2:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_80_by_1",
                                      "typeString": "int_const 80"
                                    },
                                    "value": "80"
                                  },
                                  {
                                    "id": 9498,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9481,
                                    "src": "29348:5:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_80_by_1",
                                      "typeString": "int_const 80"
                                    },
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 9496,
                                  "name": "SafeCastOverflowedIntDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8036,
                                  "src": "29314:29:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$",
                                    "typeString": "function (uint8,int256) pure returns (error)"
                                  }
                                },
                                "id": 9499,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "29314:40:29",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 9500,
                              "nodeType": "RevertStatement",
                              "src": "29307:47:29"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 9479,
                    "nodeType": "StructuredDocumentation",
                    "src": "28839:307:29",
                    "text": " @dev Returns the downcasted int80 from int256, reverting on\n overflow (when the input is less than smallest int80 or\n greater than largest int80).\n Counterpart to Solidity's `int80` operator.\n Requirements:\n - input must fit into 80 bits"
                  },
                  "id": 9504,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toInt80",
                  "nameLocation": "29160:7:29",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9482,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9481,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "29175:5:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 9504,
                        "src": "29168:12:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 9480,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "29168:6:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "29167:14:29"
                  },
                  "returnParameters": {
                    "id": 9485,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9484,
                        "mutability": "mutable",
                        "name": "downcasted",
                        "nameLocation": "29211:10:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 9504,
                        "src": "29205:16:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int80",
                          "typeString": "int80"
                        },
                        "typeName": {
                          "id": 9483,
                          "name": "int80",
                          "nodeType": "ElementaryTypeName",
                          "src": "29205:5:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int80",
                            "typeString": "int80"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "29204:18:29"
                  },
                  "scope": 9779,
                  "src": "29151:220:29",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 9529,
                    "nodeType": "Block",
                    "src": "29761:148:29",
                    "statements": [
                      {
                        "expression": {
                          "id": 9517,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 9512,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9510,
                            "src": "29771:10:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int72",
                              "typeString": "int72"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 9515,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9507,
                                "src": "29790:5:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "id": 9514,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "29784:5:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_int72_$",
                                "typeString": "type(int72)"
                              },
                              "typeName": {
                                "id": 9513,
                                "name": "int72",
                                "nodeType": "ElementaryTypeName",
                                "src": "29784:5:29",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 9516,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "29784:12:29",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int72",
                              "typeString": "int72"
                            }
                          },
                          "src": "29771:25:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int72",
                            "typeString": "int72"
                          }
                        },
                        "id": 9518,
                        "nodeType": "ExpressionStatement",
                        "src": "29771:25:29"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 9521,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 9519,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9510,
                            "src": "29810:10:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int72",
                              "typeString": "int72"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 9520,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9507,
                            "src": "29824:5:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "29810:19:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 9528,
                        "nodeType": "IfStatement",
                        "src": "29806:97:29",
                        "trueBody": {
                          "id": 9527,
                          "nodeType": "Block",
                          "src": "29831:72:29",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "3732",
                                    "id": 9523,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "29882:2:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_72_by_1",
                                      "typeString": "int_const 72"
                                    },
                                    "value": "72"
                                  },
                                  {
                                    "id": 9524,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9507,
                                    "src": "29886:5:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_72_by_1",
                                      "typeString": "int_const 72"
                                    },
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 9522,
                                  "name": "SafeCastOverflowedIntDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8036,
                                  "src": "29852:29:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$",
                                    "typeString": "function (uint8,int256) pure returns (error)"
                                  }
                                },
                                "id": 9525,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "29852:40:29",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 9526,
                              "nodeType": "RevertStatement",
                              "src": "29845:47:29"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 9505,
                    "nodeType": "StructuredDocumentation",
                    "src": "29377:307:29",
                    "text": " @dev Returns the downcasted int72 from int256, reverting on\n overflow (when the input is less than smallest int72 or\n greater than largest int72).\n Counterpart to Solidity's `int72` operator.\n Requirements:\n - input must fit into 72 bits"
                  },
                  "id": 9530,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toInt72",
                  "nameLocation": "29698:7:29",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9508,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9507,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "29713:5:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 9530,
                        "src": "29706:12:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 9506,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "29706:6:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "29705:14:29"
                  },
                  "returnParameters": {
                    "id": 9511,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9510,
                        "mutability": "mutable",
                        "name": "downcasted",
                        "nameLocation": "29749:10:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 9530,
                        "src": "29743:16:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int72",
                          "typeString": "int72"
                        },
                        "typeName": {
                          "id": 9509,
                          "name": "int72",
                          "nodeType": "ElementaryTypeName",
                          "src": "29743:5:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int72",
                            "typeString": "int72"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "29742:18:29"
                  },
                  "scope": 9779,
                  "src": "29689:220:29",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 9555,
                    "nodeType": "Block",
                    "src": "30299:148:29",
                    "statements": [
                      {
                        "expression": {
                          "id": 9543,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 9538,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9536,
                            "src": "30309:10:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int64",
                              "typeString": "int64"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 9541,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9533,
                                "src": "30328:5:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "id": 9540,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "30322:5:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_int64_$",
                                "typeString": "type(int64)"
                              },
                              "typeName": {
                                "id": 9539,
                                "name": "int64",
                                "nodeType": "ElementaryTypeName",
                                "src": "30322:5:29",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 9542,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "30322:12:29",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int64",
                              "typeString": "int64"
                            }
                          },
                          "src": "30309:25:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int64",
                            "typeString": "int64"
                          }
                        },
                        "id": 9544,
                        "nodeType": "ExpressionStatement",
                        "src": "30309:25:29"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 9547,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 9545,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9536,
                            "src": "30348:10:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int64",
                              "typeString": "int64"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 9546,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9533,
                            "src": "30362:5:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "30348:19:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 9554,
                        "nodeType": "IfStatement",
                        "src": "30344:97:29",
                        "trueBody": {
                          "id": 9553,
                          "nodeType": "Block",
                          "src": "30369:72:29",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "3634",
                                    "id": 9549,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "30420:2:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_64_by_1",
                                      "typeString": "int_const 64"
                                    },
                                    "value": "64"
                                  },
                                  {
                                    "id": 9550,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9533,
                                    "src": "30424:5:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_64_by_1",
                                      "typeString": "int_const 64"
                                    },
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 9548,
                                  "name": "SafeCastOverflowedIntDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8036,
                                  "src": "30390:29:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$",
                                    "typeString": "function (uint8,int256) pure returns (error)"
                                  }
                                },
                                "id": 9551,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "30390:40:29",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 9552,
                              "nodeType": "RevertStatement",
                              "src": "30383:47:29"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 9531,
                    "nodeType": "StructuredDocumentation",
                    "src": "29915:307:29",
                    "text": " @dev Returns the downcasted int64 from int256, reverting on\n overflow (when the input is less than smallest int64 or\n greater than largest int64).\n Counterpart to Solidity's `int64` operator.\n Requirements:\n - input must fit into 64 bits"
                  },
                  "id": 9556,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toInt64",
                  "nameLocation": "30236:7:29",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9534,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9533,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "30251:5:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 9556,
                        "src": "30244:12:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 9532,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "30244:6:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "30243:14:29"
                  },
                  "returnParameters": {
                    "id": 9537,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9536,
                        "mutability": "mutable",
                        "name": "downcasted",
                        "nameLocation": "30287:10:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 9556,
                        "src": "30281:16:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int64",
                          "typeString": "int64"
                        },
                        "typeName": {
                          "id": 9535,
                          "name": "int64",
                          "nodeType": "ElementaryTypeName",
                          "src": "30281:5:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int64",
                            "typeString": "int64"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "30280:18:29"
                  },
                  "scope": 9779,
                  "src": "30227:220:29",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 9581,
                    "nodeType": "Block",
                    "src": "30837:148:29",
                    "statements": [
                      {
                        "expression": {
                          "id": 9569,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 9564,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9562,
                            "src": "30847:10:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int56",
                              "typeString": "int56"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 9567,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9559,
                                "src": "30866:5:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "id": 9566,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "30860:5:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_int56_$",
                                "typeString": "type(int56)"
                              },
                              "typeName": {
                                "id": 9565,
                                "name": "int56",
                                "nodeType": "ElementaryTypeName",
                                "src": "30860:5:29",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 9568,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "30860:12:29",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int56",
                              "typeString": "int56"
                            }
                          },
                          "src": "30847:25:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int56",
                            "typeString": "int56"
                          }
                        },
                        "id": 9570,
                        "nodeType": "ExpressionStatement",
                        "src": "30847:25:29"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 9573,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 9571,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9562,
                            "src": "30886:10:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int56",
                              "typeString": "int56"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 9572,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9559,
                            "src": "30900:5:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "30886:19:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 9580,
                        "nodeType": "IfStatement",
                        "src": "30882:97:29",
                        "trueBody": {
                          "id": 9579,
                          "nodeType": "Block",
                          "src": "30907:72:29",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "3536",
                                    "id": 9575,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "30958:2:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_56_by_1",
                                      "typeString": "int_const 56"
                                    },
                                    "value": "56"
                                  },
                                  {
                                    "id": 9576,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9559,
                                    "src": "30962:5:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_56_by_1",
                                      "typeString": "int_const 56"
                                    },
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 9574,
                                  "name": "SafeCastOverflowedIntDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8036,
                                  "src": "30928:29:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$",
                                    "typeString": "function (uint8,int256) pure returns (error)"
                                  }
                                },
                                "id": 9577,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "30928:40:29",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 9578,
                              "nodeType": "RevertStatement",
                              "src": "30921:47:29"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 9557,
                    "nodeType": "StructuredDocumentation",
                    "src": "30453:307:29",
                    "text": " @dev Returns the downcasted int56 from int256, reverting on\n overflow (when the input is less than smallest int56 or\n greater than largest int56).\n Counterpart to Solidity's `int56` operator.\n Requirements:\n - input must fit into 56 bits"
                  },
                  "id": 9582,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toInt56",
                  "nameLocation": "30774:7:29",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9560,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9559,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "30789:5:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 9582,
                        "src": "30782:12:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 9558,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "30782:6:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "30781:14:29"
                  },
                  "returnParameters": {
                    "id": 9563,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9562,
                        "mutability": "mutable",
                        "name": "downcasted",
                        "nameLocation": "30825:10:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 9582,
                        "src": "30819:16:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int56",
                          "typeString": "int56"
                        },
                        "typeName": {
                          "id": 9561,
                          "name": "int56",
                          "nodeType": "ElementaryTypeName",
                          "src": "30819:5:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int56",
                            "typeString": "int56"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "30818:18:29"
                  },
                  "scope": 9779,
                  "src": "30765:220:29",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 9607,
                    "nodeType": "Block",
                    "src": "31375:148:29",
                    "statements": [
                      {
                        "expression": {
                          "id": 9595,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 9590,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9588,
                            "src": "31385:10:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int48",
                              "typeString": "int48"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 9593,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9585,
                                "src": "31404:5:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "id": 9592,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "31398:5:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_int48_$",
                                "typeString": "type(int48)"
                              },
                              "typeName": {
                                "id": 9591,
                                "name": "int48",
                                "nodeType": "ElementaryTypeName",
                                "src": "31398:5:29",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 9594,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "31398:12:29",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int48",
                              "typeString": "int48"
                            }
                          },
                          "src": "31385:25:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int48",
                            "typeString": "int48"
                          }
                        },
                        "id": 9596,
                        "nodeType": "ExpressionStatement",
                        "src": "31385:25:29"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 9599,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 9597,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9588,
                            "src": "31424:10:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int48",
                              "typeString": "int48"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 9598,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9585,
                            "src": "31438:5:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "31424:19:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 9606,
                        "nodeType": "IfStatement",
                        "src": "31420:97:29",
                        "trueBody": {
                          "id": 9605,
                          "nodeType": "Block",
                          "src": "31445:72:29",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "3438",
                                    "id": 9601,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "31496:2:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_48_by_1",
                                      "typeString": "int_const 48"
                                    },
                                    "value": "48"
                                  },
                                  {
                                    "id": 9602,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9585,
                                    "src": "31500:5:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_48_by_1",
                                      "typeString": "int_const 48"
                                    },
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 9600,
                                  "name": "SafeCastOverflowedIntDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8036,
                                  "src": "31466:29:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$",
                                    "typeString": "function (uint8,int256) pure returns (error)"
                                  }
                                },
                                "id": 9603,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "31466:40:29",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 9604,
                              "nodeType": "RevertStatement",
                              "src": "31459:47:29"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 9583,
                    "nodeType": "StructuredDocumentation",
                    "src": "30991:307:29",
                    "text": " @dev Returns the downcasted int48 from int256, reverting on\n overflow (when the input is less than smallest int48 or\n greater than largest int48).\n Counterpart to Solidity's `int48` operator.\n Requirements:\n - input must fit into 48 bits"
                  },
                  "id": 9608,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toInt48",
                  "nameLocation": "31312:7:29",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9586,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9585,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "31327:5:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 9608,
                        "src": "31320:12:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 9584,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "31320:6:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "31319:14:29"
                  },
                  "returnParameters": {
                    "id": 9589,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9588,
                        "mutability": "mutable",
                        "name": "downcasted",
                        "nameLocation": "31363:10:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 9608,
                        "src": "31357:16:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int48",
                          "typeString": "int48"
                        },
                        "typeName": {
                          "id": 9587,
                          "name": "int48",
                          "nodeType": "ElementaryTypeName",
                          "src": "31357:5:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int48",
                            "typeString": "int48"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "31356:18:29"
                  },
                  "scope": 9779,
                  "src": "31303:220:29",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 9633,
                    "nodeType": "Block",
                    "src": "31913:148:29",
                    "statements": [
                      {
                        "expression": {
                          "id": 9621,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 9616,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9614,
                            "src": "31923:10:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int40",
                              "typeString": "int40"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 9619,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9611,
                                "src": "31942:5:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "id": 9618,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "31936:5:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_int40_$",
                                "typeString": "type(int40)"
                              },
                              "typeName": {
                                "id": 9617,
                                "name": "int40",
                                "nodeType": "ElementaryTypeName",
                                "src": "31936:5:29",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 9620,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "31936:12:29",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int40",
                              "typeString": "int40"
                            }
                          },
                          "src": "31923:25:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int40",
                            "typeString": "int40"
                          }
                        },
                        "id": 9622,
                        "nodeType": "ExpressionStatement",
                        "src": "31923:25:29"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 9625,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 9623,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9614,
                            "src": "31962:10:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int40",
                              "typeString": "int40"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 9624,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9611,
                            "src": "31976:5:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "31962:19:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 9632,
                        "nodeType": "IfStatement",
                        "src": "31958:97:29",
                        "trueBody": {
                          "id": 9631,
                          "nodeType": "Block",
                          "src": "31983:72:29",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "3430",
                                    "id": 9627,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "32034:2:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_40_by_1",
                                      "typeString": "int_const 40"
                                    },
                                    "value": "40"
                                  },
                                  {
                                    "id": 9628,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9611,
                                    "src": "32038:5:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_40_by_1",
                                      "typeString": "int_const 40"
                                    },
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 9626,
                                  "name": "SafeCastOverflowedIntDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8036,
                                  "src": "32004:29:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$",
                                    "typeString": "function (uint8,int256) pure returns (error)"
                                  }
                                },
                                "id": 9629,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "32004:40:29",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 9630,
                              "nodeType": "RevertStatement",
                              "src": "31997:47:29"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 9609,
                    "nodeType": "StructuredDocumentation",
                    "src": "31529:307:29",
                    "text": " @dev Returns the downcasted int40 from int256, reverting on\n overflow (when the input is less than smallest int40 or\n greater than largest int40).\n Counterpart to Solidity's `int40` operator.\n Requirements:\n - input must fit into 40 bits"
                  },
                  "id": 9634,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toInt40",
                  "nameLocation": "31850:7:29",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9612,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9611,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "31865:5:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 9634,
                        "src": "31858:12:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 9610,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "31858:6:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "31857:14:29"
                  },
                  "returnParameters": {
                    "id": 9615,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9614,
                        "mutability": "mutable",
                        "name": "downcasted",
                        "nameLocation": "31901:10:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 9634,
                        "src": "31895:16:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int40",
                          "typeString": "int40"
                        },
                        "typeName": {
                          "id": 9613,
                          "name": "int40",
                          "nodeType": "ElementaryTypeName",
                          "src": "31895:5:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int40",
                            "typeString": "int40"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "31894:18:29"
                  },
                  "scope": 9779,
                  "src": "31841:220:29",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 9659,
                    "nodeType": "Block",
                    "src": "32451:148:29",
                    "statements": [
                      {
                        "expression": {
                          "id": 9647,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 9642,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9640,
                            "src": "32461:10:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int32",
                              "typeString": "int32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 9645,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9637,
                                "src": "32480:5:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "id": 9644,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "32474:5:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_int32_$",
                                "typeString": "type(int32)"
                              },
                              "typeName": {
                                "id": 9643,
                                "name": "int32",
                                "nodeType": "ElementaryTypeName",
                                "src": "32474:5:29",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 9646,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "32474:12:29",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int32",
                              "typeString": "int32"
                            }
                          },
                          "src": "32461:25:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int32",
                            "typeString": "int32"
                          }
                        },
                        "id": 9648,
                        "nodeType": "ExpressionStatement",
                        "src": "32461:25:29"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 9651,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 9649,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9640,
                            "src": "32500:10:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int32",
                              "typeString": "int32"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 9650,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9637,
                            "src": "32514:5:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "32500:19:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 9658,
                        "nodeType": "IfStatement",
                        "src": "32496:97:29",
                        "trueBody": {
                          "id": 9657,
                          "nodeType": "Block",
                          "src": "32521:72:29",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "3332",
                                    "id": 9653,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "32572:2:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_32_by_1",
                                      "typeString": "int_const 32"
                                    },
                                    "value": "32"
                                  },
                                  {
                                    "id": 9654,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9637,
                                    "src": "32576:5:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_32_by_1",
                                      "typeString": "int_const 32"
                                    },
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 9652,
                                  "name": "SafeCastOverflowedIntDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8036,
                                  "src": "32542:29:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$",
                                    "typeString": "function (uint8,int256) pure returns (error)"
                                  }
                                },
                                "id": 9655,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "32542:40:29",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 9656,
                              "nodeType": "RevertStatement",
                              "src": "32535:47:29"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 9635,
                    "nodeType": "StructuredDocumentation",
                    "src": "32067:307:29",
                    "text": " @dev Returns the downcasted int32 from int256, reverting on\n overflow (when the input is less than smallest int32 or\n greater than largest int32).\n Counterpart to Solidity's `int32` operator.\n Requirements:\n - input must fit into 32 bits"
                  },
                  "id": 9660,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toInt32",
                  "nameLocation": "32388:7:29",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9638,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9637,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "32403:5:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 9660,
                        "src": "32396:12:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 9636,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "32396:6:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "32395:14:29"
                  },
                  "returnParameters": {
                    "id": 9641,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9640,
                        "mutability": "mutable",
                        "name": "downcasted",
                        "nameLocation": "32439:10:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 9660,
                        "src": "32433:16:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int32",
                          "typeString": "int32"
                        },
                        "typeName": {
                          "id": 9639,
                          "name": "int32",
                          "nodeType": "ElementaryTypeName",
                          "src": "32433:5:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int32",
                            "typeString": "int32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "32432:18:29"
                  },
                  "scope": 9779,
                  "src": "32379:220:29",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 9685,
                    "nodeType": "Block",
                    "src": "32989:148:29",
                    "statements": [
                      {
                        "expression": {
                          "id": 9673,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 9668,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9666,
                            "src": "32999:10:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int24",
                              "typeString": "int24"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 9671,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9663,
                                "src": "33018:5:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "id": 9670,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "33012:5:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_int24_$",
                                "typeString": "type(int24)"
                              },
                              "typeName": {
                                "id": 9669,
                                "name": "int24",
                                "nodeType": "ElementaryTypeName",
                                "src": "33012:5:29",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 9672,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "33012:12:29",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int24",
                              "typeString": "int24"
                            }
                          },
                          "src": "32999:25:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "id": 9674,
                        "nodeType": "ExpressionStatement",
                        "src": "32999:25:29"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 9677,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 9675,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9666,
                            "src": "33038:10:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int24",
                              "typeString": "int24"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 9676,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9663,
                            "src": "33052:5:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "33038:19:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 9684,
                        "nodeType": "IfStatement",
                        "src": "33034:97:29",
                        "trueBody": {
                          "id": 9683,
                          "nodeType": "Block",
                          "src": "33059:72:29",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "3234",
                                    "id": 9679,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "33110:2:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_24_by_1",
                                      "typeString": "int_const 24"
                                    },
                                    "value": "24"
                                  },
                                  {
                                    "id": 9680,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9663,
                                    "src": "33114:5:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_24_by_1",
                                      "typeString": "int_const 24"
                                    },
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 9678,
                                  "name": "SafeCastOverflowedIntDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8036,
                                  "src": "33080:29:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$",
                                    "typeString": "function (uint8,int256) pure returns (error)"
                                  }
                                },
                                "id": 9681,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "33080:40:29",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 9682,
                              "nodeType": "RevertStatement",
                              "src": "33073:47:29"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 9661,
                    "nodeType": "StructuredDocumentation",
                    "src": "32605:307:29",
                    "text": " @dev Returns the downcasted int24 from int256, reverting on\n overflow (when the input is less than smallest int24 or\n greater than largest int24).\n Counterpart to Solidity's `int24` operator.\n Requirements:\n - input must fit into 24 bits"
                  },
                  "id": 9686,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toInt24",
                  "nameLocation": "32926:7:29",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9664,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9663,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "32941:5:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 9686,
                        "src": "32934:12:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 9662,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "32934:6:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "32933:14:29"
                  },
                  "returnParameters": {
                    "id": 9667,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9666,
                        "mutability": "mutable",
                        "name": "downcasted",
                        "nameLocation": "32977:10:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 9686,
                        "src": "32971:16:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int24",
                          "typeString": "int24"
                        },
                        "typeName": {
                          "id": 9665,
                          "name": "int24",
                          "nodeType": "ElementaryTypeName",
                          "src": "32971:5:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int24",
                            "typeString": "int24"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "32970:18:29"
                  },
                  "scope": 9779,
                  "src": "32917:220:29",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 9711,
                    "nodeType": "Block",
                    "src": "33527:148:29",
                    "statements": [
                      {
                        "expression": {
                          "id": 9699,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 9694,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9692,
                            "src": "33537:10:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int16",
                              "typeString": "int16"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 9697,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9689,
                                "src": "33556:5:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "id": 9696,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "33550:5:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_int16_$",
                                "typeString": "type(int16)"
                              },
                              "typeName": {
                                "id": 9695,
                                "name": "int16",
                                "nodeType": "ElementaryTypeName",
                                "src": "33550:5:29",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 9698,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "33550:12:29",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int16",
                              "typeString": "int16"
                            }
                          },
                          "src": "33537:25:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int16",
                            "typeString": "int16"
                          }
                        },
                        "id": 9700,
                        "nodeType": "ExpressionStatement",
                        "src": "33537:25:29"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 9703,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 9701,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9692,
                            "src": "33576:10:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int16",
                              "typeString": "int16"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 9702,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9689,
                            "src": "33590:5:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "33576:19:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 9710,
                        "nodeType": "IfStatement",
                        "src": "33572:97:29",
                        "trueBody": {
                          "id": 9709,
                          "nodeType": "Block",
                          "src": "33597:72:29",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "3136",
                                    "id": 9705,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "33648:2:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_16_by_1",
                                      "typeString": "int_const 16"
                                    },
                                    "value": "16"
                                  },
                                  {
                                    "id": 9706,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9689,
                                    "src": "33652:5:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_16_by_1",
                                      "typeString": "int_const 16"
                                    },
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 9704,
                                  "name": "SafeCastOverflowedIntDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8036,
                                  "src": "33618:29:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$",
                                    "typeString": "function (uint8,int256) pure returns (error)"
                                  }
                                },
                                "id": 9707,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "33618:40:29",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 9708,
                              "nodeType": "RevertStatement",
                              "src": "33611:47:29"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 9687,
                    "nodeType": "StructuredDocumentation",
                    "src": "33143:307:29",
                    "text": " @dev Returns the downcasted int16 from int256, reverting on\n overflow (when the input is less than smallest int16 or\n greater than largest int16).\n Counterpart to Solidity's `int16` operator.\n Requirements:\n - input must fit into 16 bits"
                  },
                  "id": 9712,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toInt16",
                  "nameLocation": "33464:7:29",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9690,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9689,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "33479:5:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 9712,
                        "src": "33472:12:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 9688,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "33472:6:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "33471:14:29"
                  },
                  "returnParameters": {
                    "id": 9693,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9692,
                        "mutability": "mutable",
                        "name": "downcasted",
                        "nameLocation": "33515:10:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 9712,
                        "src": "33509:16:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int16",
                          "typeString": "int16"
                        },
                        "typeName": {
                          "id": 9691,
                          "name": "int16",
                          "nodeType": "ElementaryTypeName",
                          "src": "33509:5:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int16",
                            "typeString": "int16"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "33508:18:29"
                  },
                  "scope": 9779,
                  "src": "33455:220:29",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 9737,
                    "nodeType": "Block",
                    "src": "34058:146:29",
                    "statements": [
                      {
                        "expression": {
                          "id": 9725,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 9720,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9718,
                            "src": "34068:10:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int8",
                              "typeString": "int8"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 9723,
                                "name": "value",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9715,
                                "src": "34086:5:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "id": 9722,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "34081:4:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_int8_$",
                                "typeString": "type(int8)"
                              },
                              "typeName": {
                                "id": 9721,
                                "name": "int8",
                                "nodeType": "ElementaryTypeName",
                                "src": "34081:4:29",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 9724,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "34081:11:29",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_int8",
                              "typeString": "int8"
                            }
                          },
                          "src": "34068:24:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int8",
                            "typeString": "int8"
                          }
                        },
                        "id": 9726,
                        "nodeType": "ExpressionStatement",
                        "src": "34068:24:29"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 9729,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 9727,
                            "name": "downcasted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9718,
                            "src": "34106:10:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int8",
                              "typeString": "int8"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 9728,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9715,
                            "src": "34120:5:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "34106:19:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 9736,
                        "nodeType": "IfStatement",
                        "src": "34102:96:29",
                        "trueBody": {
                          "id": 9735,
                          "nodeType": "Block",
                          "src": "34127:71:29",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "hexValue": "38",
                                    "id": 9731,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "34178:1:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_8_by_1",
                                      "typeString": "int_const 8"
                                    },
                                    "value": "8"
                                  },
                                  {
                                    "id": 9732,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9715,
                                    "src": "34181:5:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_8_by_1",
                                      "typeString": "int_const 8"
                                    },
                                    {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  ],
                                  "id": 9730,
                                  "name": "SafeCastOverflowedIntDowncast",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8036,
                                  "src": "34148:29:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$",
                                    "typeString": "function (uint8,int256) pure returns (error)"
                                  }
                                },
                                "id": 9733,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "34148:39:29",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 9734,
                              "nodeType": "RevertStatement",
                              "src": "34141:46:29"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "documentation": {
                    "id": 9713,
                    "nodeType": "StructuredDocumentation",
                    "src": "33681:302:29",
                    "text": " @dev Returns the downcasted int8 from int256, reverting on\n overflow (when the input is less than smallest int8 or\n greater than largest int8).\n Counterpart to Solidity's `int8` operator.\n Requirements:\n - input must fit into 8 bits"
                  },
                  "id": 9738,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toInt8",
                  "nameLocation": "33997:6:29",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9716,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9715,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "34011:5:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 9738,
                        "src": "34004:12:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 9714,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "34004:6:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "34003:14:29"
                  },
                  "returnParameters": {
                    "id": 9719,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9718,
                        "mutability": "mutable",
                        "name": "downcasted",
                        "nameLocation": "34046:10:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 9738,
                        "src": "34041:15:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int8",
                          "typeString": "int8"
                        },
                        "typeName": {
                          "id": 9717,
                          "name": "int8",
                          "nodeType": "ElementaryTypeName",
                          "src": "34041:4:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int8",
                            "typeString": "int8"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "34040:17:29"
                  },
                  "scope": 9779,
                  "src": "33988:216:29",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 9767,
                    "nodeType": "Block",
                    "src": "34444:250:29",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 9755,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 9746,
                            "name": "value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9741,
                            "src": "34557:5:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "arguments": [
                              {
                                "expression": {
                                  "arguments": [
                                    {
                                      "id": 9751,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "34578:6:29",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_int256_$",
                                        "typeString": "type(int256)"
                                      },
                                      "typeName": {
                                        "id": 9750,
                                        "name": "int256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "34578:6:29",
                                        "typeDescriptions": {}
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_type$_t_int256_$",
                                        "typeString": "type(int256)"
                                      }
                                    ],
                                    "id": 9749,
                                    "name": "type",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -27,
                                    "src": "34573:4:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                      "typeString": "function () pure"
                                    }
                                  },
                                  "id": 9752,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "34573:12:29",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_meta_type_t_int256",
                                    "typeString": "type(int256)"
                                  }
                                },
                                "id": 9753,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberLocation": "34586:3:29",
                                "memberName": "max",
                                "nodeType": "MemberAccess",
                                "src": "34573:16:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "id": 9748,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "34565:7:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": {
                                "id": 9747,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "34565:7:29",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 9754,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "34565:25:29",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "34557:33:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 9761,
                        "nodeType": "IfStatement",
                        "src": "34553:105:29",
                        "trueBody": {
                          "id": 9760,
                          "nodeType": "Block",
                          "src": "34592:66:29",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [
                                  {
                                    "id": 9757,
                                    "name": "value",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9741,
                                    "src": "34641:5:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 9756,
                                  "name": "SafeCastOverflowedUintToInt",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 8041,
                                  "src": "34613:27:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$_t_uint256_$returns$_t_error_$",
                                    "typeString": "function (uint256) pure returns (error)"
                                  }
                                },
                                "id": 9758,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "34613:34:29",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 9759,
                              "nodeType": "RevertStatement",
                              "src": "34606:41:29"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 9764,
                              "name": "value",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9741,
                              "src": "34681:5:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 9763,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "34674:6:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_int256_$",
                              "typeString": "type(int256)"
                            },
                            "typeName": {
                              "id": 9762,
                              "name": "int256",
                              "nodeType": "ElementaryTypeName",
                              "src": "34674:6:29",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 9765,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "34674:13:29",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "functionReturnParameters": 9745,
                        "id": 9766,
                        "nodeType": "Return",
                        "src": "34667:20:29"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 9739,
                    "nodeType": "StructuredDocumentation",
                    "src": "34210:165:29",
                    "text": " @dev Converts an unsigned uint256 into a signed int256.\n Requirements:\n - input must be less than or equal to maxInt256."
                  },
                  "id": 9768,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toInt256",
                  "nameLocation": "34389:8:29",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9742,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9741,
                        "mutability": "mutable",
                        "name": "value",
                        "nameLocation": "34406:5:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 9768,
                        "src": "34398:13:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 9740,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "34398:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "34397:15:29"
                  },
                  "returnParameters": {
                    "id": 9745,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9744,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 9768,
                        "src": "34436:6:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 9743,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "34436:6:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "34435:8:29"
                  },
                  "scope": 9779,
                  "src": "34380:314:29",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 9777,
                    "nodeType": "Block",
                    "src": "34853:87:29",
                    "statements": [
                      {
                        "AST": {
                          "nativeSrc": "34888:46:29",
                          "nodeType": "YulBlock",
                          "src": "34888:46:29",
                          "statements": [
                            {
                              "nativeSrc": "34902:22:29",
                              "nodeType": "YulAssignment",
                              "src": "34902:22:29",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "b",
                                        "nativeSrc": "34921:1:29",
                                        "nodeType": "YulIdentifier",
                                        "src": "34921:1:29"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "iszero",
                                      "nativeSrc": "34914:6:29",
                                      "nodeType": "YulIdentifier",
                                      "src": "34914:6:29"
                                    },
                                    "nativeSrc": "34914:9:29",
                                    "nodeType": "YulFunctionCall",
                                    "src": "34914:9:29"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nativeSrc": "34907:6:29",
                                  "nodeType": "YulIdentifier",
                                  "src": "34907:6:29"
                                },
                                "nativeSrc": "34907:17:29",
                                "nodeType": "YulFunctionCall",
                                "src": "34907:17:29"
                              },
                              "variableNames": [
                                {
                                  "name": "u",
                                  "nativeSrc": "34902:1:29",
                                  "nodeType": "YulIdentifier",
                                  "src": "34902:1:29"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "paris",
                        "externalReferences": [
                          {
                            "declaration": 9771,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "34921:1:29",
                            "valueSize": 1
                          },
                          {
                            "declaration": 9774,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "34902:1:29",
                            "valueSize": 1
                          }
                        ],
                        "flags": [
                          "memory-safe"
                        ],
                        "id": 9776,
                        "nodeType": "InlineAssembly",
                        "src": "34863:71:29"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 9769,
                    "nodeType": "StructuredDocumentation",
                    "src": "34700:90:29",
                    "text": " @dev Cast a boolean (false or true) to a uint256 (0 or 1) with no jump."
                  },
                  "id": 9778,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "toUint",
                  "nameLocation": "34804:6:29",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9772,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9771,
                        "mutability": "mutable",
                        "name": "b",
                        "nameLocation": "34816:1:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 9778,
                        "src": "34811:6:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 9770,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "34811:4:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "34810:8:29"
                  },
                  "returnParameters": {
                    "id": 9775,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9774,
                        "mutability": "mutable",
                        "name": "u",
                        "nameLocation": "34850:1:29",
                        "nodeType": "VariableDeclaration",
                        "scope": 9778,
                        "src": "34842:9:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 9773,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "34842:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "34841:11:29"
                  },
                  "scope": 9779,
                  "src": "34795:145:29",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 9780,
              "src": "769:34173:29",
              "usedErrors": [
                8024,
                8029,
                8036,
                8041
              ],
              "usedEvents": []
            }
          ],
          "src": "192:34751:29"
        },
        "id": 29
      },
      "@openzeppelin/contracts/utils/math/SignedMath.sol": {
        "ast": {
          "absolutePath": "@openzeppelin/contracts/utils/math/SignedMath.sol",
          "exportedSymbols": {
            "SafeCast": [
              9779
            ],
            "SignedMath": [
              9923
            ]
          },
          "id": 9924,
          "license": "MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 9781,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".20"
              ],
              "nodeType": "PragmaDirective",
              "src": "109:24:30"
            },
            {
              "absolutePath": "@openzeppelin/contracts/utils/math/SafeCast.sol",
              "file": "./SafeCast.sol",
              "id": 9783,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 9924,
              "sourceUnit": 9780,
              "src": "135:40:30",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 9782,
                    "name": "SafeCast",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 9779,
                    "src": "143:8:30",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [],
              "canonicalName": "SignedMath",
              "contractDependencies": [],
              "contractKind": "library",
              "documentation": {
                "id": 9784,
                "nodeType": "StructuredDocumentation",
                "src": "177:80:30",
                "text": " @dev Standard signed math utilities missing in the Solidity language."
              },
              "fullyImplemented": true,
              "id": 9923,
              "linearizedBaseContracts": [
                9923
              ],
              "name": "SignedMath",
              "nameLocation": "266:10:30",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 9813,
                    "nodeType": "Block",
                    "src": "746:215:30",
                    "statements": [
                      {
                        "id": 9812,
                        "nodeType": "UncheckedBlock",
                        "src": "756:199:30",
                        "statements": [
                          {
                            "expression": {
                              "commonType": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              },
                              "id": 9810,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 9796,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9791,
                                "src": "894:1:30",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "^",
                              "rightExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    },
                                    "id": 9808,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "components": [
                                        {
                                          "commonType": {
                                            "typeIdentifier": "t_int256",
                                            "typeString": "int256"
                                          },
                                          "id": 9799,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "id": 9797,
                                            "name": "a",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 9789,
                                            "src": "900:1:30",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_int256",
                                              "typeString": "int256"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "^",
                                          "rightExpression": {
                                            "id": 9798,
                                            "name": "b",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 9791,
                                            "src": "904:1:30",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_int256",
                                              "typeString": "int256"
                                            }
                                          },
                                          "src": "900:5:30",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_int256",
                                            "typeString": "int256"
                                          }
                                        }
                                      ],
                                      "id": 9800,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "TupleExpression",
                                      "src": "899:7:30",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "*",
                                    "rightExpression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "id": 9805,
                                              "name": "condition",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 9787,
                                              "src": "932:9:30",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                              }
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": [
                                              {
                                                "typeIdentifier": "t_bool",
                                                "typeString": "bool"
                                              }
                                            ],
                                            "expression": {
                                              "id": 9803,
                                              "name": "SafeCast",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 9779,
                                              "src": "916:8:30",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_type$_t_contract$_SafeCast_$9779_$",
                                                "typeString": "type(library SafeCast)"
                                              }
                                            },
                                            "id": 9804,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberLocation": "925:6:30",
                                            "memberName": "toUint",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 9778,
                                            "src": "916:15:30",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_function_internal_pure$_t_bool_$returns$_t_uint256_$",
                                              "typeString": "function (bool) pure returns (uint256)"
                                            }
                                          },
                                          "id": 9806,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "kind": "functionCall",
                                          "lValueRequested": false,
                                          "nameLocations": [],
                                          "names": [],
                                          "nodeType": "FunctionCall",
                                          "src": "916:26:30",
                                          "tryCall": false,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "id": 9802,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "lValueRequested": false,
                                        "nodeType": "ElementaryTypeNameExpression",
                                        "src": "909:6:30",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_type$_t_int256_$",
                                          "typeString": "type(int256)"
                                        },
                                        "typeName": {
                                          "id": 9801,
                                          "name": "int256",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "909:6:30",
                                          "typeDescriptions": {}
                                        }
                                      },
                                      "id": 9807,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "typeConversion",
                                      "lValueRequested": false,
                                      "nameLocations": [],
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "909:34:30",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      }
                                    },
                                    "src": "899:44:30",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  }
                                ],
                                "id": 9809,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "898:46:30",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              },
                              "src": "894:50:30",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "functionReturnParameters": 9795,
                            "id": 9811,
                            "nodeType": "Return",
                            "src": "887:57:30"
                          }
                        ]
                      }
                    ]
                  },
                  "documentation": {
                    "id": 9785,
                    "nodeType": "StructuredDocumentation",
                    "src": "283:374:30",
                    "text": " @dev Branchless ternary evaluation for `a ? b : c`. Gas costs are constant.\n IMPORTANT: This function may reduce bytecode size and consume less gas when used standalone.\n However, the compiler may optimize Solidity ternary operations (i.e. `a ? b : c`) to only compute\n one branch when needed, making this function more expensive."
                  },
                  "id": 9814,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "ternary",
                  "nameLocation": "671:7:30",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9792,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9787,
                        "mutability": "mutable",
                        "name": "condition",
                        "nameLocation": "684:9:30",
                        "nodeType": "VariableDeclaration",
                        "scope": 9814,
                        "src": "679:14:30",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 9786,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "679:4:30",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9789,
                        "mutability": "mutable",
                        "name": "a",
                        "nameLocation": "702:1:30",
                        "nodeType": "VariableDeclaration",
                        "scope": 9814,
                        "src": "695:8:30",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 9788,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "695:6:30",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9791,
                        "mutability": "mutable",
                        "name": "b",
                        "nameLocation": "712:1:30",
                        "nodeType": "VariableDeclaration",
                        "scope": 9814,
                        "src": "705:8:30",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 9790,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "705:6:30",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "678:36:30"
                  },
                  "returnParameters": {
                    "id": 9795,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9794,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 9814,
                        "src": "738:6:30",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 9793,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "738:6:30",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "737:8:30"
                  },
                  "scope": 9923,
                  "src": "662:299:30",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 9832,
                    "nodeType": "Block",
                    "src": "1102:44:30",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              },
                              "id": 9827,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 9825,
                                "name": "a",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9817,
                                "src": "1127:1:30",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "id": 9826,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9819,
                                "src": "1131:1:30",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              },
                              "src": "1127:5:30",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "id": 9828,
                              "name": "a",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9817,
                              "src": "1134:1:30",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            {
                              "id": 9829,
                              "name": "b",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9819,
                              "src": "1137:1:30",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              },
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            ],
                            "id": 9824,
                            "name": "ternary",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9814,
                            "src": "1119:7:30",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_int256_$_t_int256_$returns$_t_int256_$",
                              "typeString": "function (bool,int256,int256) pure returns (int256)"
                            }
                          },
                          "id": 9830,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1119:20:30",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "functionReturnParameters": 9823,
                        "id": 9831,
                        "nodeType": "Return",
                        "src": "1112:27:30"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 9815,
                    "nodeType": "StructuredDocumentation",
                    "src": "967:66:30",
                    "text": " @dev Returns the largest of two signed numbers."
                  },
                  "id": 9833,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "max",
                  "nameLocation": "1047:3:30",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9820,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9817,
                        "mutability": "mutable",
                        "name": "a",
                        "nameLocation": "1058:1:30",
                        "nodeType": "VariableDeclaration",
                        "scope": 9833,
                        "src": "1051:8:30",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 9816,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1051:6:30",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9819,
                        "mutability": "mutable",
                        "name": "b",
                        "nameLocation": "1068:1:30",
                        "nodeType": "VariableDeclaration",
                        "scope": 9833,
                        "src": "1061:8:30",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 9818,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1061:6:30",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1050:20:30"
                  },
                  "returnParameters": {
                    "id": 9823,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9822,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 9833,
                        "src": "1094:6:30",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 9821,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1094:6:30",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1093:8:30"
                  },
                  "scope": 9923,
                  "src": "1038:108:30",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 9851,
                    "nodeType": "Block",
                    "src": "1288:44:30",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              },
                              "id": 9846,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 9844,
                                "name": "a",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9836,
                                "src": "1313:1:30",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<",
                              "rightExpression": {
                                "id": 9845,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9838,
                                "src": "1317:1:30",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              },
                              "src": "1313:5:30",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "id": 9847,
                              "name": "a",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9836,
                              "src": "1320:1:30",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            {
                              "id": 9848,
                              "name": "b",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9838,
                              "src": "1323:1:30",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              },
                              {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            ],
                            "id": 9843,
                            "name": "ternary",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9814,
                            "src": "1305:7:30",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bool_$_t_int256_$_t_int256_$returns$_t_int256_$",
                              "typeString": "function (bool,int256,int256) pure returns (int256)"
                            }
                          },
                          "id": 9849,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1305:20:30",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "functionReturnParameters": 9842,
                        "id": 9850,
                        "nodeType": "Return",
                        "src": "1298:27:30"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 9834,
                    "nodeType": "StructuredDocumentation",
                    "src": "1152:67:30",
                    "text": " @dev Returns the smallest of two signed numbers."
                  },
                  "id": 9852,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "min",
                  "nameLocation": "1233:3:30",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9839,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9836,
                        "mutability": "mutable",
                        "name": "a",
                        "nameLocation": "1244:1:30",
                        "nodeType": "VariableDeclaration",
                        "scope": 9852,
                        "src": "1237:8:30",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 9835,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1237:6:30",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9838,
                        "mutability": "mutable",
                        "name": "b",
                        "nameLocation": "1254:1:30",
                        "nodeType": "VariableDeclaration",
                        "scope": 9852,
                        "src": "1247:8:30",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 9837,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1247:6:30",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1236:20:30"
                  },
                  "returnParameters": {
                    "id": 9842,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9841,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 9852,
                        "src": "1280:6:30",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 9840,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1280:6:30",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1279:8:30"
                  },
                  "scope": 9923,
                  "src": "1224:108:30",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 9895,
                    "nodeType": "Block",
                    "src": "1537:162:30",
                    "statements": [
                      {
                        "assignments": [
                          9863
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 9863,
                            "mutability": "mutable",
                            "name": "x",
                            "nameLocation": "1606:1:30",
                            "nodeType": "VariableDeclaration",
                            "scope": 9895,
                            "src": "1599:8:30",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            },
                            "typeName": {
                              "id": 9862,
                              "name": "int256",
                              "nodeType": "ElementaryTypeName",
                              "src": "1599:6:30",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 9876,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 9875,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "components": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                },
                                "id": 9866,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 9864,
                                  "name": "a",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9855,
                                  "src": "1611:1:30",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "&",
                                "rightExpression": {
                                  "id": 9865,
                                  "name": "b",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9857,
                                  "src": "1615:1:30",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "src": "1611:5:30",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "id": 9867,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "1610:7:30",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "components": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                },
                                "id": 9873,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "components": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      },
                                      "id": 9870,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 9868,
                                        "name": "a",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 9855,
                                        "src": "1622:1:30",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "^",
                                      "rightExpression": {
                                        "id": 9869,
                                        "name": "b",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 9857,
                                        "src": "1626:1:30",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "src": "1622:5:30",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      }
                                    }
                                  ],
                                  "id": 9871,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "1621:7:30",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">>",
                                "rightExpression": {
                                  "hexValue": "31",
                                  "id": 9872,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "1632:1:30",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "1621:12:30",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "id": 9874,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "1620:14:30",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "1610:24:30",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "1599:35:30"
                      },
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          },
                          "id": 9893,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 9877,
                            "name": "x",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9863,
                            "src": "1651:1:30",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "components": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                },
                                "id": 9891,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "arguments": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 9885,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "arguments": [
                                          {
                                            "id": 9882,
                                            "name": "x",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 9863,
                                            "src": "1671:1:30",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_int256",
                                              "typeString": "int256"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_int256",
                                              "typeString": "int256"
                                            }
                                          ],
                                          "id": 9881,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "nodeType": "ElementaryTypeNameExpression",
                                          "src": "1663:7:30",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_uint256_$",
                                            "typeString": "type(uint256)"
                                          },
                                          "typeName": {
                                            "id": 9880,
                                            "name": "uint256",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "1663:7:30",
                                            "typeDescriptions": {}
                                          }
                                        },
                                        "id": 9883,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "typeConversion",
                                        "lValueRequested": false,
                                        "nameLocations": [],
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "1663:10:30",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": ">>",
                                      "rightExpression": {
                                        "hexValue": "323535",
                                        "id": 9884,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "1677:3:30",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_255_by_1",
                                          "typeString": "int_const 255"
                                        },
                                        "value": "255"
                                      },
                                      "src": "1663:17:30",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 9879,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "1656:6:30",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_int256_$",
                                      "typeString": "type(int256)"
                                    },
                                    "typeName": {
                                      "id": 9878,
                                      "name": "int256",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "1656:6:30",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 9886,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "1656:25:30",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "&",
                                "rightExpression": {
                                  "components": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      },
                                      "id": 9889,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 9887,
                                        "name": "a",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 9855,
                                        "src": "1685:1:30",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "^",
                                      "rightExpression": {
                                        "id": 9888,
                                        "name": "b",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 9857,
                                        "src": "1689:1:30",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      },
                                      "src": "1685:5:30",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_int256",
                                        "typeString": "int256"
                                      }
                                    }
                                  ],
                                  "id": 9890,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "1684:7:30",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "src": "1656:35:30",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              }
                            ],
                            "id": 9892,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "1655:37:30",
                            "typeDescriptions": {
                              "typeIdentifier": "t_int256",
                              "typeString": "int256"
                            }
                          },
                          "src": "1651:41:30",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "functionReturnParameters": 9861,
                        "id": 9894,
                        "nodeType": "Return",
                        "src": "1644:48:30"
                      }
                    ]
                  },
                  "documentation": {
                    "id": 9853,
                    "nodeType": "StructuredDocumentation",
                    "src": "1338:126:30",
                    "text": " @dev Returns the average of two signed numbers without overflow.\n The result is rounded towards zero."
                  },
                  "id": 9896,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "average",
                  "nameLocation": "1478:7:30",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9858,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9855,
                        "mutability": "mutable",
                        "name": "a",
                        "nameLocation": "1493:1:30",
                        "nodeType": "VariableDeclaration",
                        "scope": 9896,
                        "src": "1486:8:30",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 9854,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1486:6:30",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9857,
                        "mutability": "mutable",
                        "name": "b",
                        "nameLocation": "1503:1:30",
                        "nodeType": "VariableDeclaration",
                        "scope": 9896,
                        "src": "1496:8:30",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 9856,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1496:6:30",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1485:20:30"
                  },
                  "returnParameters": {
                    "id": 9861,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9860,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 9896,
                        "src": "1529:6:30",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 9859,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1529:6:30",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1528:8:30"
                  },
                  "scope": 9923,
                  "src": "1469:230:30",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 9921,
                    "nodeType": "Block",
                    "src": "1843:767:30",
                    "statements": [
                      {
                        "id": 9920,
                        "nodeType": "UncheckedBlock",
                        "src": "1853:751:30",
                        "statements": [
                          {
                            "assignments": [
                              9905
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 9905,
                                "mutability": "mutable",
                                "name": "mask",
                                "nameLocation": "2424:4:30",
                                "nodeType": "VariableDeclaration",
                                "scope": 9920,
                                "src": "2417:11:30",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                },
                                "typeName": {
                                  "id": 9904,
                                  "name": "int256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "2417:6:30",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 9909,
                            "initialValue": {
                              "commonType": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              },
                              "id": 9908,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 9906,
                                "name": "n",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9899,
                                "src": "2431:1:30",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">>",
                              "rightExpression": {
                                "hexValue": "323535",
                                "id": 9907,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2436:3:30",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_255_by_1",
                                  "typeString": "int_const 255"
                                },
                                "value": "255"
                              },
                              "src": "2431:8:30",
                              "typeDescriptions": {
                                "typeIdentifier": "t_int256",
                                "typeString": "int256"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "2417:22:30"
                          },
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  },
                                  "id": 9917,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "components": [
                                      {
                                        "commonType": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        },
                                        "id": 9914,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 9912,
                                          "name": "n",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 9899,
                                          "src": "2576:1:30",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_int256",
                                            "typeString": "int256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "+",
                                        "rightExpression": {
                                          "id": 9913,
                                          "name": "mask",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 9905,
                                          "src": "2580:4:30",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_int256",
                                            "typeString": "int256"
                                          }
                                        },
                                        "src": "2576:8:30",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_int256",
                                          "typeString": "int256"
                                        }
                                      }
                                    ],
                                    "id": 9915,
                                    "isConstant": false,
                                    "isInlineArray": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "TupleExpression",
                                    "src": "2575:10:30",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "^",
                                  "rightExpression": {
                                    "id": 9916,
                                    "name": "mask",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9905,
                                    "src": "2588:4:30",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_int256",
                                      "typeString": "int256"
                                    }
                                  },
                                  "src": "2575:17:30",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                ],
                                "id": 9911,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "2567:7:30",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint256_$",
                                  "typeString": "type(uint256)"
                                },
                                "typeName": {
                                  "id": 9910,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "2567:7:30",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 9918,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2567:26:30",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "functionReturnParameters": 9903,
                            "id": 9919,
                            "nodeType": "Return",
                            "src": "2560:33:30"
                          }
                        ]
                      }
                    ]
                  },
                  "documentation": {
                    "id": 9897,
                    "nodeType": "StructuredDocumentation",
                    "src": "1705:78:30",
                    "text": " @dev Returns the absolute unsigned value of a signed value."
                  },
                  "id": 9922,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "abs",
                  "nameLocation": "1797:3:30",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9900,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9899,
                        "mutability": "mutable",
                        "name": "n",
                        "nameLocation": "1808:1:30",
                        "nodeType": "VariableDeclaration",
                        "scope": 9922,
                        "src": "1801:8:30",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        },
                        "typeName": {
                          "id": 9898,
                          "name": "int256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1801:6:30",
                          "typeDescriptions": {
                            "typeIdentifier": "t_int256",
                            "typeString": "int256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1800:10:30"
                  },
                  "returnParameters": {
                    "id": 9903,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9902,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 9922,
                        "src": "1834:7:30",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 9901,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1834:7:30",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1833:9:30"
                  },
                  "scope": 9923,
                  "src": "1788:822:30",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 9924,
              "src": "258:2354:30",
              "usedErrors": [],
              "usedEvents": []
            }
          ],
          "src": "109:2504:30"
        },
        "id": 30
      },
      "contracts/SoulboundToken.sol": {
        "ast": {
          "absolutePath": "contracts/SoulboundToken.sol",
          "exportedSymbols": {
            "AccessControlUpgradeable": [
              364
            ],
            "ERC1155SupplyUpgradeable": [
              2245
            ],
            "ERC1155Upgradeable": [
              2006
            ],
            "Initializable": [
              827
            ],
            "OwnableUpgradeable": [
              559
            ],
            "PausableUpgradeable": [
              2451
            ],
            "Soulbound": [
              10290
            ],
            "Strings": [
              6381
            ],
            "UUPSUpgradeable": [
              1009
            ]
          },
          "id": 10291,
          "license": "FSL-1.1-MIT",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 9925,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".24"
              ],
              "nodeType": "PragmaDirective",
              "src": "59:24:31"
            },
            {
              "absolutePath": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol",
              "file": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol",
              "id": 9927,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 10291,
              "sourceUnit": 1010,
              "src": "85:102:31",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 9926,
                    "name": "UUPSUpgradeable",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1009,
                    "src": "94:15:31",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol",
              "file": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol",
              "id": 9929,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 10291,
              "sourceUnit": 560,
              "src": "188:103:31",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 9928,
                    "name": "OwnableUpgradeable",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 559,
                    "src": "197:18:31",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts/utils/Strings.sol",
              "file": "@openzeppelin/contracts/utils/Strings.sol",
              "id": 9931,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 10291,
              "sourceUnit": 6382,
              "src": "292:68:31",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 9930,
                    "name": "Strings",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 6381,
                    "src": "301:7:31",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts-upgradeable/token/ERC1155/extensions/ERC1155SupplyUpgradeable.sol",
              "file": "@openzeppelin/contracts-upgradeable/token/ERC1155/extensions/ERC1155SupplyUpgradeable.sol",
              "id": 9934,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 10291,
              "sourceUnit": 2246,
              "src": "361:161:31",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 9932,
                    "name": "ERC1155SupplyUpgradeable",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2245,
                    "src": "374:24:31",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                },
                {
                  "foreign": {
                    "id": 9933,
                    "name": "ERC1155Upgradeable",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2006,
                    "src": "404:18:31",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol",
              "file": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol",
              "id": 9936,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 10291,
              "sourceUnit": 365,
              "src": "523:115:31",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 9935,
                    "name": "AccessControlUpgradeable",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 364,
                    "src": "532:24:31",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "absolutePath": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol",
              "file": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol",
              "id": 9939,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 10291,
              "sourceUnit": 2452,
              "src": "639:119:31",
              "symbolAliases": [
                {
                  "foreign": {
                    "id": 9937,
                    "name": "PausableUpgradeable",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2451,
                    "src": "648:19:31",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                },
                {
                  "foreign": {
                    "id": 9938,
                    "name": "Initializable",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 827,
                    "src": "669:13:31",
                    "typeDescriptions": {}
                  },
                  "nameLocation": "-1:-1:-1"
                }
              ],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "baseName": {
                    "id": 9940,
                    "name": "Initializable",
                    "nameLocations": [
                      "786:13:31"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 827,
                    "src": "786:13:31"
                  },
                  "id": 9941,
                  "nodeType": "InheritanceSpecifier",
                  "src": "786:13:31"
                },
                {
                  "baseName": {
                    "id": 9942,
                    "name": "UUPSUpgradeable",
                    "nameLocations": [
                      "805:15:31"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 1009,
                    "src": "805:15:31"
                  },
                  "id": 9943,
                  "nodeType": "InheritanceSpecifier",
                  "src": "805:15:31"
                },
                {
                  "baseName": {
                    "id": 9944,
                    "name": "ERC1155SupplyUpgradeable",
                    "nameLocations": [
                      "826:24:31"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 2245,
                    "src": "826:24:31"
                  },
                  "id": 9945,
                  "nodeType": "InheritanceSpecifier",
                  "src": "826:24:31"
                },
                {
                  "baseName": {
                    "id": 9946,
                    "name": "AccessControlUpgradeable",
                    "nameLocations": [
                      "856:24:31"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 364,
                    "src": "856:24:31"
                  },
                  "id": 9947,
                  "nodeType": "InheritanceSpecifier",
                  "src": "856:24:31"
                },
                {
                  "baseName": {
                    "id": 9948,
                    "name": "PausableUpgradeable",
                    "nameLocations": [
                      "886:19:31"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 2451,
                    "src": "886:19:31"
                  },
                  "id": 9949,
                  "nodeType": "InheritanceSpecifier",
                  "src": "886:19:31"
                }
              ],
              "canonicalName": "Soulbound",
              "contractDependencies": [],
              "contractKind": "contract",
              "fullyImplemented": true,
              "id": 10290,
              "linearizedBaseContracts": [
                10290,
                2451,
                364,
                2245,
                2006,
                2742,
                3227,
                3169,
                2491,
                6393,
                2574,
                2291,
                1009,
                2605,
                827
              ],
              "name": "Soulbound",
              "nameLocation": "769:9:31",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "global": false,
                  "id": 9952,
                  "libraryName": {
                    "id": 9950,
                    "name": "Strings",
                    "nameLocations": [
                      "918:7:31"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 6381,
                    "src": "918:7:31"
                  },
                  "nodeType": "UsingForDirective",
                  "src": "912:26:31",
                  "typeName": {
                    "id": 9951,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "930:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                },
                {
                  "constant": false,
                  "id": 9954,
                  "mutability": "mutable",
                  "name": "_tokenIdCounter",
                  "nameLocation": "1017:15:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 10290,
                  "src": "1009:23:31",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9953,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1009:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": true,
                  "functionSelector": "d5391393",
                  "id": 9959,
                  "mutability": "constant",
                  "name": "MINTER_ROLE",
                  "nameLocation": "1063:11:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 10290,
                  "src": "1039:62:31",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 9955,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1039:7:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": {
                    "arguments": [
                      {
                        "hexValue": "4d494e5445525f524f4c45",
                        "id": 9957,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1087:13:31",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6",
                          "typeString": "literal_string \"MINTER_ROLE\""
                        },
                        "value": "MINTER_ROLE"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6",
                          "typeString": "literal_string \"MINTER_ROLE\""
                        }
                      ],
                      "id": 9956,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -8,
                      "src": "1077:9:31",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 9958,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1077:24:31",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "public"
                },
                {
                  "constant": false,
                  "functionSelector": "06fdde03",
                  "id": 9961,
                  "mutability": "mutable",
                  "name": "name",
                  "nameLocation": "1122:4:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 10290,
                  "src": "1108:18:31",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_storage",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 9960,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1108:6:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "public"
                },
                {
                  "constant": false,
                  "functionSelector": "95d89b41",
                  "id": 9963,
                  "mutability": "mutable",
                  "name": "symbol",
                  "nameLocation": "1146:6:31",
                  "nodeType": "VariableDeclaration",
                  "scope": 10290,
                  "src": "1132:20:31",
                  "stateVariable": true,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_storage",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 9962,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1132:6:31",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 9995,
                    "nodeType": "Block",
                    "src": "1264:169:31",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 9975,
                              "name": "uri_",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9969,
                              "src": "1289:4:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 9974,
                            "name": "__ERC1155_init",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1090,
                            "src": "1274:14:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (string memory)"
                            }
                          },
                          "id": 9976,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1274:20:31",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 9977,
                        "nodeType": "ExpressionStatement",
                        "src": "1274:20:31"
                      },
                      {
                        "expression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 9978,
                            "name": "__AccessControl_init",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 65,
                            "src": "1304:20:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                              "typeString": "function ()"
                            }
                          },
                          "id": 9979,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1304:22:31",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 9980,
                        "nodeType": "ExpressionStatement",
                        "src": "1304:22:31"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 9982,
                              "name": "DEFAULT_ADMIN_ROLE",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 30,
                              "src": "1347:18:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "expression": {
                                "id": 9983,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "1367:3:31",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 9984,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "1371:6:31",
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "1367:10:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 9981,
                            "name": "_grantRole",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 317,
                            "src": "1336:10:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$_t_bool_$",
                              "typeString": "function (bytes32,address) returns (bool)"
                            }
                          },
                          "id": 9985,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1336:42:31",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 9986,
                        "nodeType": "ExpressionStatement",
                        "src": "1336:42:31"
                      },
                      {
                        "expression": {
                          "id": 9989,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 9987,
                            "name": "name",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9961,
                            "src": "1388:4:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_storage",
                              "typeString": "string storage ref"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 9988,
                            "name": "name_",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9965,
                            "src": "1395:5:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "src": "1388:12:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        "id": 9990,
                        "nodeType": "ExpressionStatement",
                        "src": "1388:12:31"
                      },
                      {
                        "expression": {
                          "id": 9993,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 9991,
                            "name": "symbol",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9963,
                            "src": "1410:6:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_storage",
                              "typeString": "string storage ref"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 9992,
                            "name": "symbol_",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9967,
                            "src": "1419:7:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          },
                          "src": "1410:16:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string storage ref"
                          }
                        },
                        "id": 9994,
                        "nodeType": "ExpressionStatement",
                        "src": "1410:16:31"
                      }
                    ]
                  },
                  "functionSelector": "a6487c53",
                  "id": 9996,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [
                    {
                      "id": 9972,
                      "kind": "modifierInvocation",
                      "modifierName": {
                        "id": 9971,
                        "name": "initializer",
                        "nameLocations": [
                          "1252:11:31"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 667,
                        "src": "1252:11:31"
                      },
                      "nodeType": "ModifierInvocation",
                      "src": "1252:11:31"
                    }
                  ],
                  "name": "initialize",
                  "nameLocation": "1168:10:31",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 9970,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9965,
                        "mutability": "mutable",
                        "name": "name_",
                        "nameLocation": "1193:5:31",
                        "nodeType": "VariableDeclaration",
                        "scope": 9996,
                        "src": "1179:19:31",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 9964,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "1179:6:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9967,
                        "mutability": "mutable",
                        "name": "symbol_",
                        "nameLocation": "1214:7:31",
                        "nodeType": "VariableDeclaration",
                        "scope": 9996,
                        "src": "1200:21:31",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 9966,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "1200:6:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 9969,
                        "mutability": "mutable",
                        "name": "uri_",
                        "nameLocation": "1237:4:31",
                        "nodeType": "VariableDeclaration",
                        "scope": 9996,
                        "src": "1223:18:31",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 9968,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "1223:6:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1178:64:31"
                  },
                  "returnParameters": {
                    "id": 9973,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1264:0:31"
                  },
                  "scope": 10290,
                  "src": "1159:274:31",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    2244
                  ],
                  "body": {
                    "id": 10037,
                    "nodeType": "Block",
                    "src": "1631:153:31",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 10024,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                "id": 10017,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 10012,
                                  "name": "from",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9998,
                                  "src": "1649:4:31",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "arguments": [
                                    {
                                      "hexValue": "30",
                                      "id": 10015,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "1665:1:31",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      }
                                    ],
                                    "id": 10014,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "1657:7:31",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": {
                                      "id": 10013,
                                      "name": "address",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "1657:7:31",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 10016,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "1657:10:31",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "src": "1649:18:31",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "||",
                              "rightExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                "id": 10023,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 10018,
                                  "name": "to",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 10000,
                                  "src": "1671:2:31",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "arguments": [
                                    {
                                      "hexValue": "30",
                                      "id": 10021,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "1685:1:31",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      }
                                    ],
                                    "id": 10020,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "1677:7:31",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": {
                                      "id": 10019,
                                      "name": "address",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "1677:7:31",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 10022,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "1677:10:31",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "src": "1671:16:31",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "1649:38:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "4120536f756c626f756e6420746f6b656e2063616e6e6f74206265207472616e73666572726564",
                              "id": 10025,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1689:41:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_0db1d3994805c74ee79ade77fe7592fa14aedb19cfa9d0d2d16713ecfffe4b6b",
                                "typeString": "literal_string \"A Soulbound token cannot be transferred\""
                              },
                              "value": "A Soulbound token cannot be transferred"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_0db1d3994805c74ee79ade77fe7592fa14aedb19cfa9d0d2d16713ecfffe4b6b",
                                "typeString": "literal_string \"A Soulbound token cannot be transferred\""
                              }
                            ],
                            "id": 10011,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "1641:7:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 10026,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1641:90:31",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 10027,
                        "nodeType": "ExpressionStatement",
                        "src": "1641:90:31"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 10031,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9998,
                              "src": "1755:4:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 10032,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10000,
                              "src": "1761:2:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 10033,
                              "name": "ids",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10003,
                              "src": "1765:3:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            },
                            {
                              "id": 10034,
                              "name": "values",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10006,
                              "src": "1770:6:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              },
                              {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            ],
                            "expression": {
                              "id": 10028,
                              "name": "super",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -25,
                              "src": "1741:5:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_super$_Soulbound_$10290_$",
                                "typeString": "type(contract super Soulbound)"
                              }
                            },
                            "id": 10030,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "1747:7:31",
                            "memberName": "_update",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2244,
                            "src": "1741:13:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$",
                              "typeString": "function (address,address,uint256[] memory,uint256[] memory)"
                            }
                          },
                          "id": 10035,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1741:36:31",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 10036,
                        "nodeType": "ExpressionStatement",
                        "src": "1741:36:31"
                      }
                    ]
                  },
                  "id": 10038,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_update",
                  "nameLocation": "1448:7:31",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 10009,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [
                      {
                        "id": 10008,
                        "name": "ERC1155SupplyUpgradeable",
                        "nameLocations": [
                          "1601:24:31"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 2245,
                        "src": "1601:24:31"
                      }
                    ],
                    "src": "1592:34:31"
                  },
                  "parameters": {
                    "id": 10007,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 9998,
                        "mutability": "mutable",
                        "name": "from",
                        "nameLocation": "1473:4:31",
                        "nodeType": "VariableDeclaration",
                        "scope": 10038,
                        "src": "1465:12:31",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9997,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1465:7:31",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10000,
                        "mutability": "mutable",
                        "name": "to",
                        "nameLocation": "1495:2:31",
                        "nodeType": "VariableDeclaration",
                        "scope": 10038,
                        "src": "1487:10:31",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 9999,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1487:7:31",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10003,
                        "mutability": "mutable",
                        "name": "ids",
                        "nameLocation": "1524:3:31",
                        "nodeType": "VariableDeclaration",
                        "scope": 10038,
                        "src": "1507:20:31",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 10001,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "1507:7:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 10002,
                          "nodeType": "ArrayTypeName",
                          "src": "1507:9:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                            "typeString": "uint256[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10006,
                        "mutability": "mutable",
                        "name": "values",
                        "nameLocation": "1554:6:31",
                        "nodeType": "VariableDeclaration",
                        "scope": 10038,
                        "src": "1537:23:31",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 10004,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "1537:7:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 10005,
                          "nodeType": "ArrayTypeName",
                          "src": "1537:9:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                            "typeString": "uint256[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1455:111:31"
                  },
                  "returnParameters": {
                    "id": 10010,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1631:0:31"
                  },
                  "scope": 10290,
                  "src": "1439:345:31",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                },
                {
                  "body": {
                    "id": 10045,
                    "nodeType": "Block",
                    "src": "1851:39:31",
                    "statements": [
                      {
                        "expression": {
                          "id": 10043,
                          "name": "_tokenIdCounter",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9954,
                          "src": "1868:15:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 10042,
                        "id": 10044,
                        "nodeType": "Return",
                        "src": "1861:22:31"
                      }
                    ]
                  },
                  "functionSelector": "56189236",
                  "id": 10046,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getCurrentTokenId",
                  "nameLocation": "1799:17:31",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 10039,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1816:2:31"
                  },
                  "returnParameters": {
                    "id": 10042,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10041,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 10046,
                        "src": "1842:7:31",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 10040,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1842:7:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "1841:9:31"
                  },
                  "scope": 10290,
                  "src": "1790:100:31",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 10061,
                    "nodeType": "Block",
                    "src": "1928:125:31",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 10051,
                                  "name": "DEFAULT_ADMIN_ROLE",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 30,
                                  "src": "1954:18:31",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "expression": {
                                    "id": 10052,
                                    "name": "msg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -15,
                                    "src": "1974:3:31",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_message",
                                      "typeString": "msg"
                                    }
                                  },
                                  "id": 10053,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "1978:6:31",
                                  "memberName": "sender",
                                  "nodeType": "MemberAccess",
                                  "src": "1974:10:31",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 10050,
                                "name": "hasRole",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 118,
                                "src": "1946:7:31",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$",
                                  "typeString": "function (bytes32,address) view returns (bool)"
                                }
                              },
                              "id": 10054,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "1946:39:31",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "43616c6c6572206973206e6f7420616e2061646d696e20726f6c6520617574686f7269736564",
                              "id": 10055,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1987:40:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_8a65d1e3598d5fa3979ef0509c006949b26a4145e599b30da982aa0f6871c824",
                                "typeString": "literal_string \"Caller is not an admin role authorised\""
                              },
                              "value": "Caller is not an admin role authorised"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_8a65d1e3598d5fa3979ef0509c006949b26a4145e599b30da982aa0f6871c824",
                                "typeString": "literal_string \"Caller is not an admin role authorised\""
                              }
                            ],
                            "id": 10049,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "1938:7:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 10056,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1938:90:31",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 10057,
                        "nodeType": "ExpressionStatement",
                        "src": "1938:90:31"
                      },
                      {
                        "expression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 10058,
                            "name": "_pause",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2426,
                            "src": "2038:6:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                              "typeString": "function ()"
                            }
                          },
                          "id": 10059,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2038:8:31",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 10060,
                        "nodeType": "ExpressionStatement",
                        "src": "2038:8:31"
                      }
                    ]
                  },
                  "functionSelector": "8456cb59",
                  "id": 10062,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "pause",
                  "nameLocation": "1905:5:31",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 10047,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1910:2:31"
                  },
                  "returnParameters": {
                    "id": 10048,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "1928:0:31"
                  },
                  "scope": 10290,
                  "src": "1896:157:31",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 10077,
                    "nodeType": "Block",
                    "src": "2093:127:31",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 10067,
                                  "name": "DEFAULT_ADMIN_ROLE",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 30,
                                  "src": "2119:18:31",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "expression": {
                                    "id": 10068,
                                    "name": "msg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -15,
                                    "src": "2139:3:31",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_message",
                                      "typeString": "msg"
                                    }
                                  },
                                  "id": 10069,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "2143:6:31",
                                  "memberName": "sender",
                                  "nodeType": "MemberAccess",
                                  "src": "2139:10:31",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 10066,
                                "name": "hasRole",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 118,
                                "src": "2111:7:31",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$",
                                  "typeString": "function (bytes32,address) view returns (bool)"
                                }
                              },
                              "id": 10070,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2111:39:31",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "43616c6c6572206973206e6f7420616e2061646d696e20726f6c6520617574686f7269736564",
                              "id": 10071,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2152:40:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_8a65d1e3598d5fa3979ef0509c006949b26a4145e599b30da982aa0f6871c824",
                                "typeString": "literal_string \"Caller is not an admin role authorised\""
                              },
                              "value": "Caller is not an admin role authorised"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_8a65d1e3598d5fa3979ef0509c006949b26a4145e599b30da982aa0f6871c824",
                                "typeString": "literal_string \"Caller is not an admin role authorised\""
                              }
                            ],
                            "id": 10065,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "2103:7:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 10072,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2103:90:31",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 10073,
                        "nodeType": "ExpressionStatement",
                        "src": "2103:90:31"
                      },
                      {
                        "expression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 10074,
                            "name": "_unpause",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2450,
                            "src": "2203:8:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                              "typeString": "function ()"
                            }
                          },
                          "id": 10075,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2203:10:31",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 10076,
                        "nodeType": "ExpressionStatement",
                        "src": "2203:10:31"
                      }
                    ]
                  },
                  "functionSelector": "3f4ba83a",
                  "id": 10078,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "unpause",
                  "nameLocation": "2068:7:31",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 10063,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2075:2:31"
                  },
                  "returnParameters": {
                    "id": 10064,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2093:0:31"
                  },
                  "scope": 10290,
                  "src": "2059:161:31",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 10104,
                    "nodeType": "Block",
                    "src": "2285:167:31",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 10087,
                                  "name": "MINTER_ROLE",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9959,
                                  "src": "2311:11:31",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "expression": {
                                    "id": 10088,
                                    "name": "msg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -15,
                                    "src": "2324:3:31",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_message",
                                      "typeString": "msg"
                                    }
                                  },
                                  "id": 10089,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "2328:6:31",
                                  "memberName": "sender",
                                  "nodeType": "MemberAccess",
                                  "src": "2324:10:31",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 10086,
                                "name": "hasRole",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 118,
                                "src": "2303:7:31",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$",
                                  "typeString": "function (bytes32,address) view returns (bool)"
                                }
                              },
                              "id": 10090,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2303:32:31",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "43616c6c6572206973206e6f742061206d696e746572",
                              "id": 10091,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2337:24:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_71abfcf6e817aaed3ce6663958bac2a3a82999ed0036c98a95b29f350f04cedf",
                                "typeString": "literal_string \"Caller is not a minter\""
                              },
                              "value": "Caller is not a minter"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_71abfcf6e817aaed3ce6663958bac2a3a82999ed0036c98a95b29f350f04cedf",
                                "typeString": "literal_string \"Caller is not a minter\""
                              }
                            ],
                            "id": 10085,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "2295:7:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 10092,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2295:67:31",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 10093,
                        "nodeType": "ExpressionStatement",
                        "src": "2295:67:31"
                      },
                      {
                        "expression": {
                          "id": 10095,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "++",
                          "prefix": false,
                          "src": "2372:17:31",
                          "subExpression": {
                            "id": 10094,
                            "name": "_tokenIdCounter",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9954,
                            "src": "2372:15:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 10096,
                        "nodeType": "ExpressionStatement",
                        "src": "2372:17:31"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 10098,
                              "name": "recipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10082,
                              "src": "2405:9:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 10099,
                              "name": "_tokenIdCounter",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 9954,
                              "src": "2416:15:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 10100,
                              "name": "amounts",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10080,
                              "src": "2433:7:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "hexValue": "",
                              "id": 10101,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2442:2:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                "typeString": "literal_string \"\""
                              },
                              "value": ""
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                "typeString": "literal_string \"\""
                              }
                            ],
                            "id": 10097,
                            "name": "_mint",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1811,
                            "src": "2399:5:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$",
                              "typeString": "function (address,uint256,uint256,bytes memory)"
                            }
                          },
                          "id": 10102,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2399:46:31",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 10103,
                        "nodeType": "ExpressionStatement",
                        "src": "2399:46:31"
                      }
                    ]
                  },
                  "functionSelector": "94bf804d",
                  "id": 10105,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "mint",
                  "nameLocation": "2235:4:31",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 10083,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10080,
                        "mutability": "mutable",
                        "name": "amounts",
                        "nameLocation": "2248:7:31",
                        "nodeType": "VariableDeclaration",
                        "scope": 10105,
                        "src": "2240:15:31",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 10079,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2240:7:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10082,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nameLocation": "2265:9:31",
                        "nodeType": "VariableDeclaration",
                        "scope": 10105,
                        "src": "2257:17:31",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10081,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2257:7:31",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2239:36:31"
                  },
                  "returnParameters": {
                    "id": 10084,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2285:0:31"
                  },
                  "scope": 10290,
                  "src": "2226:226:31",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 10167,
                    "nodeType": "Block",
                    "src": "2529:398:31",
                    "statements": [
                      {
                        "assignments": [
                          10117
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 10117,
                            "mutability": "mutable",
                            "name": "tokenIdsArray",
                            "nameLocation": "2556:13:31",
                            "nodeType": "VariableDeclaration",
                            "scope": 10167,
                            "src": "2539:30:31",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                              "typeString": "uint256[]"
                            },
                            "typeName": {
                              "baseType": {
                                "id": 10115,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "2539:7:31",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 10116,
                              "nodeType": "ArrayTypeName",
                              "src": "2539:9:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                                "typeString": "uint256[]"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 10124,
                        "initialValue": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 10121,
                                "name": "amounts",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 10108,
                                "src": "2586:7:31",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                  "typeString": "uint256[] memory"
                                }
                              },
                              "id": 10122,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "2594:6:31",
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "src": "2586:14:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 10120,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "NewExpression",
                            "src": "2572:13:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$",
                              "typeString": "function (uint256) pure returns (uint256[] memory)"
                            },
                            "typeName": {
                              "baseType": {
                                "id": 10118,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "2576:7:31",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 10119,
                              "nodeType": "ArrayTypeName",
                              "src": "2576:9:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                                "typeString": "uint256[]"
                              }
                            }
                          },
                          "id": 10123,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2572:29:31",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                            "typeString": "uint256[] memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2539:62:31"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 10127,
                                  "name": "MINTER_ROLE",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9959,
                                  "src": "2627:11:31",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "expression": {
                                    "id": 10128,
                                    "name": "msg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -15,
                                    "src": "2640:3:31",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_message",
                                      "typeString": "msg"
                                    }
                                  },
                                  "id": 10129,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "2644:6:31",
                                  "memberName": "sender",
                                  "nodeType": "MemberAccess",
                                  "src": "2640:10:31",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 10126,
                                "name": "hasRole",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 118,
                                "src": "2619:7:31",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$",
                                  "typeString": "function (bytes32,address) view returns (bool)"
                                }
                              },
                              "id": 10130,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2619:32:31",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "43616c6c6572206973206e6f742061206d696e746572",
                              "id": 10131,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2653:24:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_71abfcf6e817aaed3ce6663958bac2a3a82999ed0036c98a95b29f350f04cedf",
                                "typeString": "literal_string \"Caller is not a minter\""
                              },
                              "value": "Caller is not a minter"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_71abfcf6e817aaed3ce6663958bac2a3a82999ed0036c98a95b29f350f04cedf",
                                "typeString": "literal_string \"Caller is not a minter\""
                              }
                            ],
                            "id": 10125,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "2611:7:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 10132,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2611:67:31",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 10133,
                        "nodeType": "ExpressionStatement",
                        "src": "2611:67:31"
                      },
                      {
                        "body": {
                          "id": 10158,
                          "nodeType": "Block",
                          "src": "2733:129:31",
                          "statements": [
                            {
                              "expression": {
                                "id": 10146,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "++",
                                "prefix": false,
                                "src": "2747:17:31",
                                "subExpression": {
                                  "id": 10145,
                                  "name": "_tokenIdCounter",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9954,
                                  "src": "2747:15:31",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 10147,
                              "nodeType": "ExpressionStatement",
                              "src": "2747:17:31"
                            },
                            {
                              "assignments": [
                                10149
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 10149,
                                  "mutability": "mutable",
                                  "name": "tokenId",
                                  "nameLocation": "2786:7:31",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 10158,
                                  "src": "2778:15:31",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 10148,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "2778:7:31",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 10151,
                              "initialValue": {
                                "id": 10150,
                                "name": "_tokenIdCounter",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9954,
                                "src": "2796:15:31",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "2778:33:31"
                            },
                            {
                              "expression": {
                                "id": 10156,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "baseExpression": {
                                    "id": 10152,
                                    "name": "tokenIdsArray",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 10117,
                                    "src": "2825:13:31",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                      "typeString": "uint256[] memory"
                                    }
                                  },
                                  "id": 10154,
                                  "indexExpression": {
                                    "id": 10153,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 10135,
                                    "src": "2839:1:31",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "2825:16:31",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "id": 10155,
                                  "name": "tokenId",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 10149,
                                  "src": "2844:7:31",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "2825:26:31",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 10157,
                              "nodeType": "ExpressionStatement",
                              "src": "2825:26:31"
                            }
                          ]
                        },
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10141,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 10138,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10135,
                            "src": "2708:1:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "expression": {
                              "id": 10139,
                              "name": "amounts",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10108,
                              "src": "2712:7:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            },
                            "id": 10140,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "2720:6:31",
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "2712:14:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2708:18:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 10159,
                        "initializationExpression": {
                          "assignments": [
                            10135
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 10135,
                              "mutability": "mutable",
                              "name": "i",
                              "nameLocation": "2701:1:31",
                              "nodeType": "VariableDeclaration",
                              "scope": 10159,
                              "src": "2693:9:31",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 10134,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "2693:7:31",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "visibility": "internal"
                            }
                          ],
                          "id": 10137,
                          "initialValue": {
                            "hexValue": "30",
                            "id": 10136,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2705:1:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "2693:13:31"
                        },
                        "isSimpleCounterLoop": true,
                        "loopExpression": {
                          "expression": {
                            "id": 10143,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": true,
                            "src": "2728:3:31",
                            "subExpression": {
                              "id": 10142,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10135,
                              "src": "2730:1:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 10144,
                          "nodeType": "ExpressionStatement",
                          "src": "2728:3:31"
                        },
                        "nodeType": "ForStatement",
                        "src": "2688:174:31"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 10161,
                              "name": "recipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10110,
                              "src": "2882:9:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 10162,
                              "name": "tokenIdsArray",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10117,
                              "src": "2893:13:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            },
                            {
                              "id": 10163,
                              "name": "amounts",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10108,
                              "src": "2908:7:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            },
                            {
                              "hexValue": "",
                              "id": 10164,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2917:2:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                "typeString": "literal_string \"\""
                              },
                              "value": ""
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              },
                              {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                "typeString": "literal_string \"\""
                              }
                            ],
                            "id": 10160,
                            "name": "_mintBatch",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1852,
                            "src": "2871:10:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$returns$__$",
                              "typeString": "function (address,uint256[] memory,uint256[] memory,bytes memory)"
                            }
                          },
                          "id": 10165,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2871:49:31",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 10166,
                        "nodeType": "ExpressionStatement",
                        "src": "2871:49:31"
                      }
                    ]
                  },
                  "functionSelector": "6ac4d939",
                  "id": 10168,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "mintBatch",
                  "nameLocation": "2467:9:31",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 10111,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10108,
                        "mutability": "mutable",
                        "name": "amounts",
                        "nameLocation": "2494:7:31",
                        "nodeType": "VariableDeclaration",
                        "scope": 10168,
                        "src": "2477:24:31",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 10106,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "2477:7:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 10107,
                          "nodeType": "ArrayTypeName",
                          "src": "2477:9:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                            "typeString": "uint256[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10110,
                        "mutability": "mutable",
                        "name": "recipient",
                        "nameLocation": "2511:9:31",
                        "nodeType": "VariableDeclaration",
                        "scope": 10168,
                        "src": "2503:17:31",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10109,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2503:7:31",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2476:45:31"
                  },
                  "returnParameters": {
                    "id": 10112,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2529:0:31"
                  },
                  "scope": 10290,
                  "src": "2458:469:31",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "body": {
                    "id": 10182,
                    "nodeType": "Block",
                    "src": "2990:52:31",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 10176,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "3006:3:31",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 10177,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "3010:6:31",
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "3006:10:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 10178,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10170,
                              "src": "3018:7:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 10179,
                              "name": "amounts",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10172,
                              "src": "3027:7:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 10175,
                            "name": "_burn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1902,
                            "src": "3000:5:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256,uint256)"
                            }
                          },
                          "id": 10180,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3000:35:31",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 10181,
                        "nodeType": "ExpressionStatement",
                        "src": "3000:35:31"
                      }
                    ]
                  },
                  "functionSelector": "b390c0ab",
                  "id": 10183,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "burn",
                  "nameLocation": "2942:4:31",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 10173,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10170,
                        "mutability": "mutable",
                        "name": "tokenId",
                        "nameLocation": "2955:7:31",
                        "nodeType": "VariableDeclaration",
                        "scope": 10183,
                        "src": "2947:15:31",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 10169,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2947:7:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10172,
                        "mutability": "mutable",
                        "name": "amounts",
                        "nameLocation": "2972:7:31",
                        "nodeType": "VariableDeclaration",
                        "scope": 10183,
                        "src": "2964:15:31",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 10171,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2964:7:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "2946:34:31"
                  },
                  "returnParameters": {
                    "id": 10174,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "2990:0:31"
                  },
                  "scope": 10290,
                  "src": "2933:109:31",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 10199,
                    "nodeType": "Block",
                    "src": "3129:58:31",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 10193,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "3150:3:31",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 10194,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "3154:6:31",
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "3150:10:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 10195,
                              "name": "tokenIds",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10186,
                              "src": "3162:8:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            },
                            {
                              "id": 10196,
                              "name": "amounts",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10189,
                              "src": "3172:7:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              },
                              {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                "typeString": "uint256[] memory"
                              }
                            ],
                            "id": 10192,
                            "name": "_burnBatch",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1941,
                            "src": "3139:10:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$",
                              "typeString": "function (address,uint256[] memory,uint256[] memory)"
                            }
                          },
                          "id": 10197,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3139:41:31",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 10198,
                        "nodeType": "ExpressionStatement",
                        "src": "3139:41:31"
                      }
                    ]
                  },
                  "functionSelector": "83ca4b6f",
                  "id": 10200,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "burnBatch",
                  "nameLocation": "3057:9:31",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 10190,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10186,
                        "mutability": "mutable",
                        "name": "tokenIds",
                        "nameLocation": "3084:8:31",
                        "nodeType": "VariableDeclaration",
                        "scope": 10200,
                        "src": "3067:25:31",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 10184,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "3067:7:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 10185,
                          "nodeType": "ArrayTypeName",
                          "src": "3067:9:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                            "typeString": "uint256[]"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10189,
                        "mutability": "mutable",
                        "name": "amounts",
                        "nameLocation": "3111:7:31",
                        "nodeType": "VariableDeclaration",
                        "scope": 10200,
                        "src": "3094:24:31",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                          "typeString": "uint256[]"
                        },
                        "typeName": {
                          "baseType": {
                            "id": 10187,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "3094:7:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 10188,
                          "nodeType": "ArrayTypeName",
                          "src": "3094:9:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                            "typeString": "uint256[]"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3066:53:31"
                  },
                  "returnParameters": {
                    "id": 10191,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3129:0:31"
                  },
                  "scope": 10290,
                  "src": "3048:139:31",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": {
                    "id": 10218,
                    "nodeType": "Block",
                    "src": "3240:132:31",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 10207,
                                  "name": "DEFAULT_ADMIN_ROLE",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 30,
                                  "src": "3266:18:31",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "expression": {
                                    "id": 10208,
                                    "name": "msg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -15,
                                    "src": "3286:3:31",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_message",
                                      "typeString": "msg"
                                    }
                                  },
                                  "id": 10209,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "3290:6:31",
                                  "memberName": "sender",
                                  "nodeType": "MemberAccess",
                                  "src": "3286:10:31",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 10206,
                                "name": "hasRole",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 118,
                                "src": "3258:7:31",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$",
                                  "typeString": "function (bytes32,address) view returns (bool)"
                                }
                              },
                              "id": 10210,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3258:39:31",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "43616c6c6572206973206e6f7420616e2061646d696e20726f6c6520617574686f7269736564",
                              "id": 10211,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3299:40:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_8a65d1e3598d5fa3979ef0509c006949b26a4145e599b30da982aa0f6871c824",
                                "typeString": "literal_string \"Caller is not an admin role authorised\""
                              },
                              "value": "Caller is not an admin role authorised"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_8a65d1e3598d5fa3979ef0509c006949b26a4145e599b30da982aa0f6871c824",
                                "typeString": "literal_string \"Caller is not an admin role authorised\""
                              }
                            ],
                            "id": 10205,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "3250:7:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 10212,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3250:90:31",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 10213,
                        "nodeType": "ExpressionStatement",
                        "src": "3250:90:31"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 10215,
                              "name": "newuri",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10202,
                              "src": "3358:6:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 10214,
                            "name": "_setURI",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1759,
                            "src": "3350:7:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (string memory)"
                            }
                          },
                          "id": 10216,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3350:15:31",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 10217,
                        "nodeType": "ExpressionStatement",
                        "src": "3350:15:31"
                      }
                    ]
                  },
                  "functionSelector": "02fe5305",
                  "id": 10219,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setURI",
                  "nameLocation": "3202:6:31",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 10203,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10202,
                        "mutability": "mutable",
                        "name": "newuri",
                        "nameLocation": "3223:6:31",
                        "nodeType": "VariableDeclaration",
                        "scope": 10219,
                        "src": "3209:20:31",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 10201,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "3209:6:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3208:22:31"
                  },
                  "returnParameters": {
                    "id": 10204,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3240:0:31"
                  },
                  "scope": 10290,
                  "src": "3193:179:31",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "baseFunctions": [
                    1151
                  ],
                  "body": {
                    "id": 10242,
                    "nodeType": "Block",
                    "src": "3448:87:31",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "id": 10233,
                                      "name": "id",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 10221,
                                      "src": "3499:2:31",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "id": 10231,
                                      "name": "super",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -25,
                                      "src": "3489:5:31",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_super$_Soulbound_$10290_$",
                                        "typeString": "type(contract super Soulbound)"
                                      }
                                    },
                                    "id": 10232,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "3495:3:31",
                                    "memberName": "uri",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 1151,
                                    "src": "3489:9:31",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_string_memory_ptr_$",
                                      "typeString": "function (uint256) view returns (string memory)"
                                    }
                                  },
                                  "id": 10234,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "3489:13:31",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_string_memory_ptr",
                                    "typeString": "string memory"
                                  }
                                },
                                {
                                  "arguments": [],
                                  "expression": {
                                    "argumentTypes": [],
                                    "expression": {
                                      "id": 10235,
                                      "name": "id",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 10221,
                                      "src": "3504:2:31",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 10236,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "3507:8:31",
                                    "memberName": "toString",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 5093,
                                    "src": "3504:11:31",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_string_memory_ptr_$attached_to$_t_uint256_$",
                                      "typeString": "function (uint256) pure returns (string memory)"
                                    }
                                  },
                                  "id": 10237,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "3504:13:31",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_string_memory_ptr",
                                    "typeString": "string memory"
                                  }
                                },
                                {
                                  "hexValue": "2e6a736f6e",
                                  "id": 10238,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "string",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3519:7:31",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_stringliteral_94311adc0a0cd4e10be11b23bd4316b8cffa4adf693e8f96f5c075aa439a7972",
                                    "typeString": "literal_string \".json\""
                                  },
                                  "value": ".json"
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_string_memory_ptr",
                                    "typeString": "string memory"
                                  },
                                  {
                                    "typeIdentifier": "t_string_memory_ptr",
                                    "typeString": "string memory"
                                  },
                                  {
                                    "typeIdentifier": "t_stringliteral_94311adc0a0cd4e10be11b23bd4316b8cffa4adf693e8f96f5c075aa439a7972",
                                    "typeString": "literal_string \".json\""
                                  }
                                ],
                                "expression": {
                                  "id": 10229,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -1,
                                  "src": "3472:3:31",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 10230,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberLocation": "3476:12:31",
                                "memberName": "encodePacked",
                                "nodeType": "MemberAccess",
                                "src": "3472:16:31",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function () pure returns (bytes memory)"
                                }
                              },
                              "id": 10239,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3472:55:31",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 10228,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3465:6:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                              "typeString": "type(string storage pointer)"
                            },
                            "typeName": {
                              "id": 10227,
                              "name": "string",
                              "nodeType": "ElementaryTypeName",
                              "src": "3465:6:31",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 10240,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3465:63:31",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        "functionReturnParameters": 10226,
                        "id": 10241,
                        "nodeType": "Return",
                        "src": "3458:70:31"
                      }
                    ]
                  },
                  "functionSelector": "0e89341c",
                  "id": 10243,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "uri",
                  "nameLocation": "3387:3:31",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 10223,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "3415:8:31"
                  },
                  "parameters": {
                    "id": 10222,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10221,
                        "mutability": "mutable",
                        "name": "id",
                        "nameLocation": "3399:2:31",
                        "nodeType": "VariableDeclaration",
                        "scope": 10243,
                        "src": "3391:10:31",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 10220,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "3391:7:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3390:12:31"
                  },
                  "returnParameters": {
                    "id": 10226,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10225,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 10243,
                        "src": "3433:13:31",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string"
                        },
                        "typeName": {
                          "id": 10224,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "3433:6:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_storage_ptr",
                            "typeString": "string"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3432:15:31"
                  },
                  "scope": 10290,
                  "src": "3378:157:31",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    1261
                  ],
                  "body": {
                    "id": 10258,
                    "nodeType": "Block",
                    "src": "3625:67:31",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 10252,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "3654:3:31",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 10253,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "3658:6:31",
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "3654:10:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 10254,
                              "name": "operator",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10245,
                              "src": "3666:8:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 10255,
                              "name": "approved",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10247,
                              "src": "3676:8:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 10251,
                            "name": "_setApprovalForAll",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1989,
                            "src": "3635:18:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_bool_$returns$__$",
                              "typeString": "function (address,address,bool)"
                            }
                          },
                          "id": 10256,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3635:50:31",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 10257,
                        "nodeType": "ExpressionStatement",
                        "src": "3635:50:31"
                      }
                    ]
                  },
                  "functionSelector": "a22cb465",
                  "id": 10259,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "setApprovalForAll",
                  "nameLocation": "3550:17:31",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 10249,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "3616:8:31"
                  },
                  "parameters": {
                    "id": 10248,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10245,
                        "mutability": "mutable",
                        "name": "operator",
                        "nameLocation": "3576:8:31",
                        "nodeType": "VariableDeclaration",
                        "scope": 10259,
                        "src": "3568:16:31",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10244,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "3568:7:31",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 10247,
                        "mutability": "mutable",
                        "name": "approved",
                        "nameLocation": "3591:8:31",
                        "nodeType": "VariableDeclaration",
                        "scope": 10259,
                        "src": "3586:13:31",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 10246,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "3586:4:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3567:33:31"
                  },
                  "returnParameters": {
                    "id": 10250,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "3625:0:31"
                  },
                  "scope": 10290,
                  "src": "3541:151:31",
                  "stateMutability": "nonpayable",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    93,
                    1133
                  ],
                  "body": {
                    "id": 10281,
                    "nodeType": "Block",
                    "src": "3879:115:31",
                    "statements": [
                      {
                        "expression": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 10279,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            },
                            "id": 10274,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 10269,
                              "name": "interfaceId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10261,
                              "src": "3896:11:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 10271,
                                    "name": "OwnableUpgradeable",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 559,
                                    "src": "3916:18:31",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_OwnableUpgradeable_$559_$",
                                      "typeString": "type(contract OwnableUpgradeable)"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_type$_t_contract$_OwnableUpgradeable_$559_$",
                                      "typeString": "type(contract OwnableUpgradeable)"
                                    }
                                  ],
                                  "id": 10270,
                                  "name": "type",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -27,
                                  "src": "3911:4:31",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                    "typeString": "function () pure"
                                  }
                                },
                                "id": 10272,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3911:24:31",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_meta_type_t_contract$_OwnableUpgradeable_$559",
                                  "typeString": "type(contract OwnableUpgradeable)"
                                }
                              },
                              "id": 10273,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberLocation": "3936:11:31",
                              "memberName": "interfaceId",
                              "nodeType": "MemberAccess",
                              "src": "3911:36:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              }
                            },
                            "src": "3896:51:31",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "||",
                          "rightExpression": {
                            "arguments": [
                              {
                                "id": 10277,
                                "name": "interfaceId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 10261,
                                "src": "3975:11:31",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              ],
                              "expression": {
                                "id": 10275,
                                "name": "super",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -25,
                                "src": "3951:5:31",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_super$_Soulbound_$10290_$",
                                  "typeString": "type(contract super Soulbound)"
                                }
                              },
                              "id": 10276,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "3957:17:31",
                              "memberName": "supportsInterface",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 93,
                              "src": "3951:23:31",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_bytes4_$returns$_t_bool_$",
                                "typeString": "function (bytes4) view returns (bool)"
                              }
                            },
                            "id": 10278,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3951:36:31",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "3896:91:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 10268,
                        "id": 10280,
                        "nodeType": "Return",
                        "src": "3889:98:31"
                      }
                    ]
                  },
                  "functionSelector": "01ffc9a7",
                  "id": 10282,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "supportsInterface",
                  "nameLocation": "3707:17:31",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 10265,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [
                      {
                        "id": 10263,
                        "name": "ERC1155Upgradeable",
                        "nameLocations": [
                          "3806:18:31"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 2006,
                        "src": "3806:18:31"
                      },
                      {
                        "id": 10264,
                        "name": "AccessControlUpgradeable",
                        "nameLocations": [
                          "3826:24:31"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 364,
                        "src": "3826:24:31"
                      }
                    ],
                    "src": "3797:54:31"
                  },
                  "parameters": {
                    "id": 10262,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10261,
                        "mutability": "mutable",
                        "name": "interfaceId",
                        "nameLocation": "3732:11:31",
                        "nodeType": "VariableDeclaration",
                        "scope": 10282,
                        "src": "3725:18:31",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "typeName": {
                          "id": 10260,
                          "name": "bytes4",
                          "nodeType": "ElementaryTypeName",
                          "src": "3725:6:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3724:20:31"
                  },
                  "returnParameters": {
                    "id": 10268,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10267,
                        "mutability": "mutable",
                        "name": "",
                        "nameLocation": "-1:-1:-1",
                        "nodeType": "VariableDeclaration",
                        "scope": 10282,
                        "src": "3869:4:31",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "typeName": {
                          "id": 10266,
                          "name": "bool",
                          "nodeType": "ElementaryTypeName",
                          "src": "3869:4:31",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "3868:6:31"
                  },
                  "scope": 10290,
                  "src": "3698:296:31",
                  "stateMutability": "view",
                  "virtual": true,
                  "visibility": "public"
                },
                {
                  "baseFunctions": [
                    963
                  ],
                  "body": {
                    "id": 10288,
                    "nodeType": "Block",
                    "src": "4125:3:31",
                    "statements": []
                  },
                  "id": 10289,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "_authorizeUpgrade",
                  "nameLocation": "4062:17:31",
                  "nodeType": "FunctionDefinition",
                  "overrides": {
                    "id": 10286,
                    "nodeType": "OverrideSpecifier",
                    "overrides": [],
                    "src": "4116:8:31"
                  },
                  "parameters": {
                    "id": 10285,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10284,
                        "mutability": "mutable",
                        "name": "newImplementation",
                        "nameLocation": "4088:17:31",
                        "nodeType": "VariableDeclaration",
                        "scope": 10289,
                        "src": "4080:25:31",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 10283,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4080:7:31",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "4079:27:31"
                  },
                  "returnParameters": {
                    "id": 10287,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "4125:0:31"
                  },
                  "scope": 10290,
                  "src": "4053:75:31",
                  "stateMutability": "nonpayable",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 10291,
              "src": "760:3370:31",
              "usedErrors": [
                576,
                579,
                854,
                859,
                2330,
                2333,
                2501,
                2504,
                2707,
                2712,
                2717,
                2724,
                2729,
                2734,
                2741,
                2762,
                2775,
                3391,
                4664
              ],
              "usedEvents": [
                584,
                2322,
                2327,
                2513,
                2522,
                2531,
                2582,
                3066,
                3081,
                3090,
                3097
              ]
            }
          ],
          "src": "59:4072:31"
        },
        "id": 31
      }
    },
    "contracts": {
      "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol": {
        "AccessControlUpgradeable": {
          "abi": [
            {
              "inputs": [],
              "name": "AccessControlBadConfirmation",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                },
                {
                  "internalType": "bytes32",
                  "name": "neededRole",
                  "type": "bytes32"
                }
              ],
              "name": "AccessControlUnauthorizedAccount",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "InvalidInitialization",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "NotInitializing",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint64",
                  "name": "version",
                  "type": "uint64"
                }
              ],
              "name": "Initialized",
              "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"
            },
            {
              "inputs": [],
              "name": "DEFAULT_ADMIN_ROLE",
              "outputs": [
                {
                  "internalType": "bytes32",
                  "name": "",
                  "type": "bytes32"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes32",
                  "name": "role",
                  "type": "bytes32"
                }
              ],
              "name": "getRoleAdmin",
              "outputs": [
                {
                  "internalType": "bytes32",
                  "name": "",
                  "type": "bytes32"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes32",
                  "name": "role",
                  "type": "bytes32"
                },
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "grantRole",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes32",
                  "name": "role",
                  "type": "bytes32"
                },
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "hasRole",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "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": "bytes4",
                  "name": "interfaceId",
                  "type": "bytes4"
                }
              ],
              "name": "supportsInterface",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "DEFAULT_ADMIN_ROLE()": "a217fddf",
              "getRoleAdmin(bytes32)": "248a9ca3",
              "grantRole(bytes32,address)": "2f2ff15d",
              "hasRole(bytes32,address)": "91d14854",
              "renounceRole(bytes32,address)": "36568abe",
              "revokeRole(bytes32,address)": "d547741f",
              "supportsInterface(bytes4)": "01ffc9a7"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"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\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"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\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"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_ROLE`, 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_ROLE` 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.\",\"errors\":{\"AccessControlBadConfirmation()\":[{\"details\":\"The caller of a function is not the expected one. NOTE: Don't confuse with {AccessControlUnauthorizedAccount}.\"}],\"AccessControlUnauthorizedAccount(address,bytes32)\":[{\"details\":\"The `account` is missing a role.\"}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted to signal this.\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call. This account bears the admin role (for the granted role). Expected in cases where the role was granted using the internal {AccessControl-_grantRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"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`)\"}},\"kind\":\"dev\",\"methods\":{\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"grantRole(bytes32,address)\":{\"details\":\"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.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"renounceRole(bytes32,address)\":{\"details\":\"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.\"},\"revokeRole(bytes32,address)\":{\"details\":\"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.\"},\"supportsInterface(bytes4)\":{\"details\":\"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[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol\":\"AccessControlUpgradeable\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol\":{\"keccak256\":\"0x85a70e2b1b65e9ba456add364d22b97eb9944083df1c39c0b4bd6a4b5aa386a4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d32a33be6ca4d8e89b9e82e3f9cec7a6c4e040534152313ff55da85b8f193059\",\"dweb:/ipfs/QmeR55L8t2A8xZ1nvT5y4yVWfFbbmpaGAtGBMz3GGNpuyP\"]},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0xdb4d24ee2c087c391d587cd17adfe5b3f9d93b3110b1388c2ab6c7c0ad1dcd05\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ab7b6d5b9e2b88176312967fe0f0e78f3d9a1422fa5e4b64e2440c35869b5d08\",\"dweb:/ipfs/QmXKYWWyzcLg1B2k7Sb1qkEXgLCYfXecR9wYW5obRzWP1Q\"]},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9\",\"dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV\"]},\"@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol\":{\"keccak256\":\"0x6694b63ddb2c59bbe341c846171798350e8f72fa02189fcdeaca864e28b54e1f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d945d33e2189ac4e531e4ed228f59ca957b3898c4f9051f4b8c7ae44d72b23a\",\"dweb:/ipfs/QmRcEwubTe3xyXxthijs5fVzEgUFSxeddjd5PGfhBnkunX\"]},\"@openzeppelin/contracts/access/IAccessControl.sol\":{\"keccak256\":\"0xbff9f59c84e5337689161ce7641c0ef8e872d6a7536fbc1f5133f128887aba3c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b308f882e796f7b79c9502deacb0a62983035c6f6f4e962b319ba6a1f4a77d3d\",\"dweb:/ipfs/QmaWCW7ahEQqFjwhSUhV7Ae7WhfNvzSpE7DQ58hvEooqPL\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617\",\"dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol": {
        "OwnableUpgradeable": {
          "abi": [
            {
              "inputs": [],
              "name": "InvalidInitialization",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "NotInitializing",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "OwnableInvalidOwner",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "OwnableUnauthorizedAccount",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint64",
                  "name": "version",
                  "type": "uint64"
                }
              ],
              "name": "Initialized",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "previousOwner",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "newOwner",
                  "type": "address"
                }
              ],
              "name": "OwnershipTransferred",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "owner",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "renounceOwnership",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "newOwner",
                  "type": "address"
                }
              ],
              "name": "transferOwnership",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "owner()": "8da5cb5b",
              "renounceOwnership()": "715018a6",
              "transferOwnership(address)": "f2fde38b"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Contract module which provides a basic access control mechanism, where there is an account (an owner) that can be granted exclusive access to specific functions. The initial owner is set to the address provided by the deployer. This can later be changed with {transferOwnership}. This module is used through inheritance. It will make available the modifier `onlyOwner`, which can be applied to your functions to restrict their use to the owner.\",\"errors\":{\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"}},\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":\"OwnableUpgradeable\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6\",\"dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2\"]},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0xdb4d24ee2c087c391d587cd17adfe5b3f9d93b3110b1388c2ab6c7c0ad1dcd05\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ab7b6d5b9e2b88176312967fe0f0e78f3d9a1422fa5e4b64e2440c35869b5d08\",\"dweb:/ipfs/QmXKYWWyzcLg1B2k7Sb1qkEXgLCYfXecR9wYW5obRzWP1Q\"]},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9\",\"dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol": {
        "Initializable": {
          "abi": [
            {
              "inputs": [],
              "name": "InvalidInitialization",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "NotInitializing",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint64",
                  "name": "version",
                  "type": "uint64"
                }
              ],
              "name": "Initialized",
              "type": "event"
            }
          ],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"}],\"devdoc\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor constructor() {     _disableInitializers(); } ``` ====\",\"details\":\"This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer function so it can only be called once. The {initializer} modifier provided by this contract will have this effect. The initialization functions use a version number. Once a version number is used, it is consumed and cannot be reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in case an upgrade adds a module that needs to be initialized. For example: [.hljs-theme-light.nopadding] ```solidity contract MyToken is ERC20Upgradeable {     function initialize() initializer public {         __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");     } } contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {     function initializeV2() reinitializer(2) public {         __ERC20Permit_init(\\\"MyToken\\\");     } } ``` TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}. CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure that all initializers are idempotent. This is not verified automatically as constructors are by Solidity. [CAUTION] ==== Avoid leaving a contract uninitialized. An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke the {_disableInitializers} function in the constructor to automatically lock it when it is deployed: [.hljs-theme-light.nopadding] ```\",\"errors\":{\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"}},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":\"Initializable\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0xdb4d24ee2c087c391d587cd17adfe5b3f9d93b3110b1388c2ab6c7c0ad1dcd05\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ab7b6d5b9e2b88176312967fe0f0e78f3d9a1422fa5e4b64e2440c35869b5d08\",\"dweb:/ipfs/QmXKYWWyzcLg1B2k7Sb1qkEXgLCYfXecR9wYW5obRzWP1Q\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol": {
        "UUPSUpgradeable": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "target",
                  "type": "address"
                }
              ],
              "name": "AddressEmptyCode",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "implementation",
                  "type": "address"
                }
              ],
              "name": "ERC1967InvalidImplementation",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "ERC1967NonPayable",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "FailedCall",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "InvalidInitialization",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "NotInitializing",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "UUPSUnauthorizedCallContext",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes32",
                  "name": "slot",
                  "type": "bytes32"
                }
              ],
              "name": "UUPSUnsupportedProxiableUUID",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint64",
                  "name": "version",
                  "type": "uint64"
                }
              ],
              "name": "Initialized",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "implementation",
                  "type": "address"
                }
              ],
              "name": "Upgraded",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "UPGRADE_INTERFACE_VERSION",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "proxiableUUID",
              "outputs": [
                {
                  "internalType": "bytes32",
                  "name": "",
                  "type": "bytes32"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "newImplementation",
                  "type": "address"
                },
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "name": "upgradeToAndCall",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "UPGRADE_INTERFACE_VERSION()": "ad3cb1cc",
              "proxiableUUID()": "52d1902d",
              "upgradeToAndCall(address,bytes)": "4f1ef286"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC1967NonPayable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"UPGRADE_INTERFACE_VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy. A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing `UUPSUpgradeable` with a custom implementation of upgrades. The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\",\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"ERC1967InvalidImplementation(address)\":[{\"details\":\"The `implementation` of the proxy is invalid.\"}],\"ERC1967NonPayable()\":[{\"details\":\"An upgrade function sees `msg.value > 0` that may be lost.\"}],\"FailedCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{\"proxiableUUID()\":{\"details\":\"Implementation of the ERC-1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\"},\"upgradeToAndCall(address,bytes)\":{\"custom:oz-upgrades-unsafe-allow-reachable\":\"delegatecall\",\"details\":\"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event.\"}},\"stateVariables\":{\"UPGRADE_INTERFACE_VERSION\":{\"details\":\"The version of the upgrade interface of the contract. If this getter is missing, both `upgradeTo(address)` and `upgradeToAndCall(address,bytes)` are present, and `upgradeTo` must be used if no function should be called, while `upgradeToAndCall` will invoke the `receive` function if the second argument is the empty byte string. If the getter returns `\\\"5.0.0\\\"`, only `upgradeToAndCall(address,bytes)` is present, and the second argument must be the empty byte string if no function should be called, making it impossible to invoke the `receive` function during an upgrade.\"},\"__self\":{\"custom:oz-upgrades-unsafe-allow\":\"state-variable-immutable\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol\":\"UUPSUpgradeable\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0xdb4d24ee2c087c391d587cd17adfe5b3f9d93b3110b1388c2ab6c7c0ad1dcd05\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ab7b6d5b9e2b88176312967fe0f0e78f3d9a1422fa5e4b64e2440c35869b5d08\",\"dweb:/ipfs/QmXKYWWyzcLg1B2k7Sb1qkEXgLCYfXecR9wYW5obRzWP1Q\"]},\"@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol\":{\"keccak256\":\"0x574a7451e42724f7de29e2855c392a8a5020acd695169466a18459467d719d63\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5bc189f63b639ee173dd7b6fecc39baf7113bf161776aea22b34c57fdd1872ec\",\"dweb:/ipfs/QmZAf2VtjDLRULqjJkde6LNsxAg12tUqpPqgUQQZbAjgtZ\"]},\"@openzeppelin/contracts/interfaces/IERC1967.sol\":{\"keccak256\":\"0xbf2aefe54b76d7f7bcd4f6da1080b7b1662611937d870b880db584d09cea56b5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5e7e2f12e0feec75296e57f51f82fdaa8bd1551f4b8cc6560442c0bf60f818c\",\"dweb:/ipfs/QmcW9wDMaQ8RbQibMarfp17a3bABzY5KraWe2YDwuUrUoz\"]},\"@openzeppelin/contracts/interfaces/draft-IERC1822.sol\":{\"keccak256\":\"0x82f757819bf2429a0d4db141b99a4bbe5039e4ef86dfb94e2e6d40577ed5b28b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://37c30ed931e19fb71fdb806bb504cfdb9913b7127545001b64d4487783374422\",\"dweb:/ipfs/QmUBHpv4hm3ZmwJ4GH8BeVzK4mv41Q6vBbWXxn8HExPXza\"]},\"@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0xa1ad192cd45317c788618bef5cb1fb3ca4ce8b230f6433ac68cc1d850fb81618\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b43447bb85a53679d269a403c693b9d88d6c74177dfb35eddca63abaf7cf110a\",\"dweb:/ipfs/QmXSDmpd4bNZj1PDgegr6C4w1jDaWHXCconC3rYiw9TSkQ\"]},\"@openzeppelin/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0x20462ddb2665e9521372c76b001d0ce196e59dbbd989de9af5576cad0bd5628b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f417fd12aeec8fbfaceaa30e3a08a0724c0bc39de363e2acf6773c897abbaf6d\",\"dweb:/ipfs/QmU4Hko6sApdweVM92CsiuLKkCk8HfyBeutF89PCTz5Tye\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x6d0ae6e206645341fd122d278c2cb643dea260c190531f2f3f6a0426e77b00c0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://032d1201d839435be2c85b72e33206b3ea980c569d6ebf7fa57d811ab580a82f\",\"dweb:/ipfs/QmeqQjAtMvdZT2tG7zm39itcRJkuwu8AEReK6WRnLJ18DD\"]},\"@openzeppelin/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155Upgradeable.sol": {
        "ERC1155Upgradeable": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "balance",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "needed",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "ERC1155InsufficientBalance",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "approver",
                  "type": "address"
                }
              ],
              "name": "ERC1155InvalidApprover",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "idsLength",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "valuesLength",
                  "type": "uint256"
                }
              ],
              "name": "ERC1155InvalidArrayLength",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                }
              ],
              "name": "ERC1155InvalidOperator",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "receiver",
                  "type": "address"
                }
              ],
              "name": "ERC1155InvalidReceiver",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                }
              ],
              "name": "ERC1155InvalidSender",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "ERC1155MissingApprovalForAll",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "InvalidInitialization",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "NotInitializing",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "bool",
                  "name": "approved",
                  "type": "bool"
                }
              ],
              "name": "ApprovalForAll",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint64",
                  "name": "version",
                  "type": "uint64"
                }
              ],
              "name": "Initialized",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256[]",
                  "name": "ids",
                  "type": "uint256[]"
                },
                {
                  "indexed": false,
                  "internalType": "uint256[]",
                  "name": "values",
                  "type": "uint256[]"
                }
              ],
              "name": "TransferBatch",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "id",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "TransferSingle",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "string",
                  "name": "value",
                  "type": "string"
                },
                {
                  "indexed": true,
                  "internalType": "uint256",
                  "name": "id",
                  "type": "uint256"
                }
              ],
              "name": "URI",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "id",
                  "type": "uint256"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address[]",
                  "name": "accounts",
                  "type": "address[]"
                },
                {
                  "internalType": "uint256[]",
                  "name": "ids",
                  "type": "uint256[]"
                }
              ],
              "name": "balanceOfBatch",
              "outputs": [
                {
                  "internalType": "uint256[]",
                  "name": "",
                  "type": "uint256[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                }
              ],
              "name": "isApprovedForAll",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256[]",
                  "name": "ids",
                  "type": "uint256[]"
                },
                {
                  "internalType": "uint256[]",
                  "name": "values",
                  "type": "uint256[]"
                },
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "name": "safeBatchTransferFrom",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "id",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "name": "safeTransferFrom",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                },
                {
                  "internalType": "bool",
                  "name": "approved",
                  "type": "bool"
                }
              ],
              "name": "setApprovalForAll",
              "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": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "name": "uri",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "balanceOf(address,uint256)": "00fdd58e",
              "balanceOfBatch(address[],uint256[])": "4e1273f4",
              "isApprovedForAll(address,address)": "e985e9c5",
              "safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)": "2eb2c2d6",
              "safeTransferFrom(address,address,uint256,uint256,bytes)": "f242432a",
              "setApprovalForAll(address,bool)": "a22cb465",
              "supportsInterface(bytes4)": "01ffc9a7",
              "uri(uint256)": "0e89341c"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC1155InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC1155InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"idsLength\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"valuesLength\",\"type\":\"uint256\"}],\"name\":\"ERC1155InvalidArrayLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"ERC1155InvalidOperator\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC1155InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC1155InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC1155MissingApprovalForAll\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"}],\"name\":\"TransferBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"TransferSingle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"value\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"URI\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"accounts\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"}],\"name\":\"balanceOfBatch\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeBatchTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"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\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"uri\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Implementation of the basic standard multi-token. See https://eips.ethereum.org/EIPS/eip-1155 Originally based on code by Enjin: https://github.com/enjin/erc-1155\",\"errors\":{\"ERC1155InsufficientBalance(address,uint256,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC1155InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC1155InvalidArrayLength(uint256,uint256)\":[{\"details\":\"Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation. Used in batch transfers.\",\"params\":{\"idsLength\":\"Length of the array of token identifiers\",\"valuesLength\":\"Length of the array of token amounts\"}}],\"ERC1155InvalidOperator(address)\":[{\"details\":\"Indicates a failure with the `operator` to be approved. Used in approvals.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC1155InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC1155InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC1155MissingApprovalForAll(address,address)\":[{\"details\":\"Indicates a failure with the `operator`\\u2019s approval. Used in transfers.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\",\"owner\":\"Address of the current owner of a token.\"}}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}]},\"events\":{\"ApprovalForAll(address,address,bool)\":{\"details\":\"Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to `approved`.\"},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"TransferBatch(address,address,address,uint256[],uint256[])\":{\"details\":\"Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all transfers.\"},\"TransferSingle(address,address,address,uint256,uint256)\":{\"details\":\"Emitted when `value` amount of tokens of type `id` are transferred from `from` to `to` by `operator`.\"},\"URI(string,uint256)\":{\"details\":\"Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. If an {URI} event was emitted for `id`, the standard https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value returned by {IERC1155MetadataURI-uri}.\"}},\"kind\":\"dev\",\"methods\":{\"balanceOf(address,uint256)\":{\"details\":\"Returns the value of tokens of token type `id` owned by `account`.\"},\"balanceOfBatch(address[],uint256[])\":{\"details\":\"See {IERC1155-balanceOfBatch}. Requirements: - `accounts` and `ids` must have the same length.\"},\"isApprovedForAll(address,address)\":{\"details\":\"Returns true if `operator` is approved to transfer ``account``'s tokens. See {setApprovalForAll}.\"},\"safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)\":{\"details\":\"xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. WARNING: This function can potentially allow a reentrancy attack when transferring tokens to an untrusted contract, when invoking {IERC1155Receiver-onERC1155BatchReceived} on the receiver. Ensure to follow the checks-effects-interactions pattern and consider employing reentrancy guards when interacting with untrusted contracts. Emits either a {TransferSingle} or a {TransferBatch} event, depending on the length of the array arguments. Requirements: - `ids` and `values` must have the same length. - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the acceptance magic value.\"},\"safeTransferFrom(address,address,uint256,uint256,bytes)\":{\"details\":\"Transfers a `value` amount of tokens of type `id` from `from` to `to`. WARNING: This function can potentially allow a reentrancy attack when transferring tokens to an untrusted contract, when invoking {IERC1155Receiver-onERC1155Received} on the receiver. Ensure to follow the checks-effects-interactions pattern and consider employing reentrancy guards when interacting with untrusted contracts. Emits a {TransferSingle} event. Requirements: - `to` cannot be the zero address. - If the caller is not `from`, it must have been approved to spend ``from``'s tokens via {setApprovalForAll}. - `from` must have a balance of tokens of type `id` of at least `value` amount. - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the acceptance magic value.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, Emits an {ApprovalForAll} event. Requirements: - `operator` cannot be the zero address.\"},\"supportsInterface(bytes4)\":{\"details\":\"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[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"},\"uri(uint256)\":{\"details\":\"See {IERC1155MetadataURI-uri}. This implementation returns the same URI for *all* token types. It relies on the token type ID substitution mechanism https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the ERC]. Clients calling this function must replace the `\\\\{id\\\\}` substring with the actual token type ID.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155Upgradeable.sol\":\"ERC1155Upgradeable\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0xdb4d24ee2c087c391d587cd17adfe5b3f9d93b3110b1388c2ab6c7c0ad1dcd05\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ab7b6d5b9e2b88176312967fe0f0e78f3d9a1422fa5e4b64e2440c35869b5d08\",\"dweb:/ipfs/QmXKYWWyzcLg1B2k7Sb1qkEXgLCYfXecR9wYW5obRzWP1Q\"]},\"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155Upgradeable.sol\":{\"keccak256\":\"0x366f804cd7571a67c51bec726d9f25b44cb0fb52bdeeed88b397c24c7ea0865f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a8fccf68ef3ff40ed155e23ed8e3d0de299dcef6012a0536828b16c65af2b3c8\",\"dweb:/ipfs/Qmahy3CJAgMoNJEpbJMjEKsZMc6sU8gCYrFan4WnmBrMZT\"]},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9\",\"dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV\"]},\"@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol\":{\"keccak256\":\"0x6694b63ddb2c59bbe341c846171798350e8f72fa02189fcdeaca864e28b54e1f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d945d33e2189ac4e531e4ed228f59ca957b3898c4f9051f4b8c7ae44d72b23a\",\"dweb:/ipfs/QmRcEwubTe3xyXxthijs5fVzEgUFSxeddjd5PGfhBnkunX\"]},\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x19fdfb0f3b89a230e7dbd1cf416f1a6b531a3ee5db4da483f946320fc74afc0e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3490d794728f5bfecb46820431adaff71ba374141545ec20b650bb60353fac23\",\"dweb:/ipfs/QmPsfxjVpMcZbpE7BH93DzTpEaktESigEw4SmDzkXuJ4WR\"]},\"@openzeppelin/contracts/token/ERC1155/IERC1155.sol\":{\"keccak256\":\"0xf189f9b417fe1931e1ab706838aff1128528694a9fcdb5ff7665197f2ca57d09\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2ff0143c836c8c9f85d13708733c09e21251395847fccfb518bf3b556726a840\",\"dweb:/ipfs/QmP69sjjrQrhYAsvCSSB69Bx66SiUPdQUqdzMYnf4wANHm\"]},\"@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol\":{\"keccak256\":\"0x6ec6d7fce29668ede560c7d2e10f9d10de3473f5298e431e70a5767db42fa620\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ac0139e51874aeec0730d040e57993187541777eb01d5939c06d5d2b986a54e8\",\"dweb:/ipfs/QmZbMbdPzusXuX9FGkyArV8hgzKLBZaL5RzMtCdCawtwPF\"]},\"@openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol\":{\"keccak256\":\"0x98c32de9b02f43eba7c0aba9fadf331cffb35a8d2076dce1d556c8f2cad704aa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38f68f76e741cce3ca4e0f8ece5ab9d69a203829311a403bafc8f7b95a7e6d63\",\"dweb:/ipfs/QmZ8PrDXU5DiZ7fzEoRN7vHMQdemtsqvYVV5AdvAnScS4o\"]},\"@openzeppelin/contracts/token/ERC1155/utils/ERC1155Utils.sol\":{\"keccak256\":\"0xaeca1511f7da49bdb16e44aa0f09dca76b51ba079bd068b2f80b8fe6d22b5fa1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://542fe084e72e14f4298954f70c407d5795c1207a02c049f9b91e15f3b9a525a5\",\"dweb:/ipfs/QmbPQMVUVZBE9R9Va6FNfZBTrUY51nrjm8qxpeoAoRrPrQ\"]},\"@openzeppelin/contracts/utils/Arrays.sol\":{\"keccak256\":\"0xa4b9958797e0e9cde82a090525e90f80d5745ba1c67ee72b488bd3087498a17e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c9344f7c2f80322c2e76d9d89bed03fd12f3e011e74fde7cf24ea21bdd2abe2d\",\"dweb:/ipfs/QmPMAjF5x2fHUAee2FKMZDBbFVrbZbPCr3a9KHLZaSn1zY\"]},\"@openzeppelin/contracts/utils/Comparators.sol\":{\"keccak256\":\"0x302eecd8cf323b4690e3494a7d960b3cbce077032ab8ef655b323cdd136cec58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://49ba706f1bc476d68fe6c1fad75517acea4e9e275be0989b548e292eb3a3eacd\",\"dweb:/ipfs/QmeBpvcdGWzWMKTQESUCEhHgnEQYYATVwPxLMxa6vMT7jC\"]},\"@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"@openzeppelin/contracts/utils/SlotDerivation.sol\":{\"keccak256\":\"0x67672e4ca1dafdcc661d4eba8475cfac631fa0933309258e3af7644b92e1fb26\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30192451f05ea5ddb0c18bd0f9003f098505836ba19c08a9c365adf829454da2\",\"dweb:/ipfs/QmfCuZSCTyCdFoSKn7MSaN6hZksnQn9ZhrZDAdRTCbwGu2\"]},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617\",\"dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x1225214420c83ebcca88f2ae2b50f053aaa7df7bd684c3e878d334627f2edfc6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c5fab4970634f9ab9a620983dc1c8a30153981a0b1a521666e269d0a11399d3\",\"dweb:/ipfs/QmVRnBC575MESGkEHndjujtR7qub2FzU9RWy9eKLp4hPZB\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts-upgradeable/token/ERC1155/extensions/ERC1155SupplyUpgradeable.sol": {
        "ERC1155SupplyUpgradeable": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "balance",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "needed",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "ERC1155InsufficientBalance",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "approver",
                  "type": "address"
                }
              ],
              "name": "ERC1155InvalidApprover",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "idsLength",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "valuesLength",
                  "type": "uint256"
                }
              ],
              "name": "ERC1155InvalidArrayLength",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                }
              ],
              "name": "ERC1155InvalidOperator",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "receiver",
                  "type": "address"
                }
              ],
              "name": "ERC1155InvalidReceiver",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                }
              ],
              "name": "ERC1155InvalidSender",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "ERC1155MissingApprovalForAll",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "InvalidInitialization",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "NotInitializing",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "bool",
                  "name": "approved",
                  "type": "bool"
                }
              ],
              "name": "ApprovalForAll",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint64",
                  "name": "version",
                  "type": "uint64"
                }
              ],
              "name": "Initialized",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256[]",
                  "name": "ids",
                  "type": "uint256[]"
                },
                {
                  "indexed": false,
                  "internalType": "uint256[]",
                  "name": "values",
                  "type": "uint256[]"
                }
              ],
              "name": "TransferBatch",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "id",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "TransferSingle",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "string",
                  "name": "value",
                  "type": "string"
                },
                {
                  "indexed": true,
                  "internalType": "uint256",
                  "name": "id",
                  "type": "uint256"
                }
              ],
              "name": "URI",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "id",
                  "type": "uint256"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address[]",
                  "name": "accounts",
                  "type": "address[]"
                },
                {
                  "internalType": "uint256[]",
                  "name": "ids",
                  "type": "uint256[]"
                }
              ],
              "name": "balanceOfBatch",
              "outputs": [
                {
                  "internalType": "uint256[]",
                  "name": "",
                  "type": "uint256[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "id",
                  "type": "uint256"
                }
              ],
              "name": "exists",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                }
              ],
              "name": "isApprovedForAll",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256[]",
                  "name": "ids",
                  "type": "uint256[]"
                },
                {
                  "internalType": "uint256[]",
                  "name": "values",
                  "type": "uint256[]"
                },
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "name": "safeBatchTransferFrom",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "id",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "name": "safeTransferFrom",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                },
                {
                  "internalType": "bool",
                  "name": "approved",
                  "type": "bool"
                }
              ],
              "name": "setApprovalForAll",
              "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": "totalSupply",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "id",
                  "type": "uint256"
                }
              ],
              "name": "totalSupply",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "name": "uri",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "balanceOf(address,uint256)": "00fdd58e",
              "balanceOfBatch(address[],uint256[])": "4e1273f4",
              "exists(uint256)": "4f558e79",
              "isApprovedForAll(address,address)": "e985e9c5",
              "safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)": "2eb2c2d6",
              "safeTransferFrom(address,address,uint256,uint256,bytes)": "f242432a",
              "setApprovalForAll(address,bool)": "a22cb465",
              "supportsInterface(bytes4)": "01ffc9a7",
              "totalSupply()": "18160ddd",
              "totalSupply(uint256)": "bd85b039",
              "uri(uint256)": "0e89341c"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC1155InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC1155InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"idsLength\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"valuesLength\",\"type\":\"uint256\"}],\"name\":\"ERC1155InvalidArrayLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"ERC1155InvalidOperator\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC1155InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC1155InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC1155MissingApprovalForAll\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"}],\"name\":\"TransferBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"TransferSingle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"value\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"URI\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"accounts\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"}],\"name\":\"balanceOfBatch\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"exists\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeBatchTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"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\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"uri\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Extension of ERC-1155 that adds tracking of total supply per id. Useful for scenarios where Fungible and Non-fungible tokens have to be clearly identified. Note: While a totalSupply of 1 might mean the corresponding is an NFT, there is no guarantees that no other token with the same id are not going to be minted. NOTE: This contract implies a global limit of 2**256 - 1 to the number of tokens that can be minted. CAUTION: This extension should not be added in an upgrade to an already deployed contract.\",\"errors\":{\"ERC1155InsufficientBalance(address,uint256,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC1155InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC1155InvalidArrayLength(uint256,uint256)\":[{\"details\":\"Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation. Used in batch transfers.\",\"params\":{\"idsLength\":\"Length of the array of token identifiers\",\"valuesLength\":\"Length of the array of token amounts\"}}],\"ERC1155InvalidOperator(address)\":[{\"details\":\"Indicates a failure with the `operator` to be approved. Used in approvals.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC1155InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC1155InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC1155MissingApprovalForAll(address,address)\":[{\"details\":\"Indicates a failure with the `operator`\\u2019s approval. Used in transfers.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\",\"owner\":\"Address of the current owner of a token.\"}}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}]},\"events\":{\"ApprovalForAll(address,address,bool)\":{\"details\":\"Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to `approved`.\"},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"TransferBatch(address,address,address,uint256[],uint256[])\":{\"details\":\"Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all transfers.\"},\"TransferSingle(address,address,address,uint256,uint256)\":{\"details\":\"Emitted when `value` amount of tokens of type `id` are transferred from `from` to `to` by `operator`.\"},\"URI(string,uint256)\":{\"details\":\"Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. If an {URI} event was emitted for `id`, the standard https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value returned by {IERC1155MetadataURI-uri}.\"}},\"kind\":\"dev\",\"methods\":{\"balanceOf(address,uint256)\":{\"details\":\"Returns the value of tokens of token type `id` owned by `account`.\"},\"balanceOfBatch(address[],uint256[])\":{\"details\":\"See {IERC1155-balanceOfBatch}. Requirements: - `accounts` and `ids` must have the same length.\"},\"exists(uint256)\":{\"details\":\"Indicates whether any token exist with a given id, or not.\"},\"isApprovedForAll(address,address)\":{\"details\":\"Returns true if `operator` is approved to transfer ``account``'s tokens. See {setApprovalForAll}.\"},\"safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)\":{\"details\":\"xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. WARNING: This function can potentially allow a reentrancy attack when transferring tokens to an untrusted contract, when invoking {IERC1155Receiver-onERC1155BatchReceived} on the receiver. Ensure to follow the checks-effects-interactions pattern and consider employing reentrancy guards when interacting with untrusted contracts. Emits either a {TransferSingle} or a {TransferBatch} event, depending on the length of the array arguments. Requirements: - `ids` and `values` must have the same length. - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the acceptance magic value.\"},\"safeTransferFrom(address,address,uint256,uint256,bytes)\":{\"details\":\"Transfers a `value` amount of tokens of type `id` from `from` to `to`. WARNING: This function can potentially allow a reentrancy attack when transferring tokens to an untrusted contract, when invoking {IERC1155Receiver-onERC1155Received} on the receiver. Ensure to follow the checks-effects-interactions pattern and consider employing reentrancy guards when interacting with untrusted contracts. Emits a {TransferSingle} event. Requirements: - `to` cannot be the zero address. - If the caller is not `from`, it must have been approved to spend ``from``'s tokens via {setApprovalForAll}. - `from` must have a balance of tokens of type `id` of at least `value` amount. - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the acceptance magic value.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, Emits an {ApprovalForAll} event. Requirements: - `operator` cannot be the zero address.\"},\"supportsInterface(bytes4)\":{\"details\":\"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[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"},\"totalSupply()\":{\"details\":\"Total value of tokens.\"},\"totalSupply(uint256)\":{\"details\":\"Total value of tokens in with a given id.\"},\"uri(uint256)\":{\"details\":\"See {IERC1155MetadataURI-uri}. This implementation returns the same URI for *all* token types. It relies on the token type ID substitution mechanism https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the ERC]. Clients calling this function must replace the `\\\\{id\\\\}` substring with the actual token type ID.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts-upgradeable/token/ERC1155/extensions/ERC1155SupplyUpgradeable.sol\":\"ERC1155SupplyUpgradeable\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0xdb4d24ee2c087c391d587cd17adfe5b3f9d93b3110b1388c2ab6c7c0ad1dcd05\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ab7b6d5b9e2b88176312967fe0f0e78f3d9a1422fa5e4b64e2440c35869b5d08\",\"dweb:/ipfs/QmXKYWWyzcLg1B2k7Sb1qkEXgLCYfXecR9wYW5obRzWP1Q\"]},\"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155Upgradeable.sol\":{\"keccak256\":\"0x366f804cd7571a67c51bec726d9f25b44cb0fb52bdeeed88b397c24c7ea0865f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a8fccf68ef3ff40ed155e23ed8e3d0de299dcef6012a0536828b16c65af2b3c8\",\"dweb:/ipfs/Qmahy3CJAgMoNJEpbJMjEKsZMc6sU8gCYrFan4WnmBrMZT\"]},\"@openzeppelin/contracts-upgradeable/token/ERC1155/extensions/ERC1155SupplyUpgradeable.sol\":{\"keccak256\":\"0xb9823676cbde3953a1578db316962b3c14d1518c246293d92acf9bb276ce5da4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://63565d7926edaed0e116338a9240edd2d391cf808d009f937762bd930d8a6c86\",\"dweb:/ipfs/QmUyfwAxYDnzSqNhCnqUqjFuM42wFNbHM4VRgjuFkc8yNW\"]},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9\",\"dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV\"]},\"@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol\":{\"keccak256\":\"0x6694b63ddb2c59bbe341c846171798350e8f72fa02189fcdeaca864e28b54e1f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d945d33e2189ac4e531e4ed228f59ca957b3898c4f9051f4b8c7ae44d72b23a\",\"dweb:/ipfs/QmRcEwubTe3xyXxthijs5fVzEgUFSxeddjd5PGfhBnkunX\"]},\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x19fdfb0f3b89a230e7dbd1cf416f1a6b531a3ee5db4da483f946320fc74afc0e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3490d794728f5bfecb46820431adaff71ba374141545ec20b650bb60353fac23\",\"dweb:/ipfs/QmPsfxjVpMcZbpE7BH93DzTpEaktESigEw4SmDzkXuJ4WR\"]},\"@openzeppelin/contracts/token/ERC1155/IERC1155.sol\":{\"keccak256\":\"0xf189f9b417fe1931e1ab706838aff1128528694a9fcdb5ff7665197f2ca57d09\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2ff0143c836c8c9f85d13708733c09e21251395847fccfb518bf3b556726a840\",\"dweb:/ipfs/QmP69sjjrQrhYAsvCSSB69Bx66SiUPdQUqdzMYnf4wANHm\"]},\"@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol\":{\"keccak256\":\"0x6ec6d7fce29668ede560c7d2e10f9d10de3473f5298e431e70a5767db42fa620\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ac0139e51874aeec0730d040e57993187541777eb01d5939c06d5d2b986a54e8\",\"dweb:/ipfs/QmZbMbdPzusXuX9FGkyArV8hgzKLBZaL5RzMtCdCawtwPF\"]},\"@openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol\":{\"keccak256\":\"0x98c32de9b02f43eba7c0aba9fadf331cffb35a8d2076dce1d556c8f2cad704aa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38f68f76e741cce3ca4e0f8ece5ab9d69a203829311a403bafc8f7b95a7e6d63\",\"dweb:/ipfs/QmZ8PrDXU5DiZ7fzEoRN7vHMQdemtsqvYVV5AdvAnScS4o\"]},\"@openzeppelin/contracts/token/ERC1155/utils/ERC1155Utils.sol\":{\"keccak256\":\"0xaeca1511f7da49bdb16e44aa0f09dca76b51ba079bd068b2f80b8fe6d22b5fa1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://542fe084e72e14f4298954f70c407d5795c1207a02c049f9b91e15f3b9a525a5\",\"dweb:/ipfs/QmbPQMVUVZBE9R9Va6FNfZBTrUY51nrjm8qxpeoAoRrPrQ\"]},\"@openzeppelin/contracts/utils/Arrays.sol\":{\"keccak256\":\"0xa4b9958797e0e9cde82a090525e90f80d5745ba1c67ee72b488bd3087498a17e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c9344f7c2f80322c2e76d9d89bed03fd12f3e011e74fde7cf24ea21bdd2abe2d\",\"dweb:/ipfs/QmPMAjF5x2fHUAee2FKMZDBbFVrbZbPCr3a9KHLZaSn1zY\"]},\"@openzeppelin/contracts/utils/Comparators.sol\":{\"keccak256\":\"0x302eecd8cf323b4690e3494a7d960b3cbce077032ab8ef655b323cdd136cec58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://49ba706f1bc476d68fe6c1fad75517acea4e9e275be0989b548e292eb3a3eacd\",\"dweb:/ipfs/QmeBpvcdGWzWMKTQESUCEhHgnEQYYATVwPxLMxa6vMT7jC\"]},\"@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"@openzeppelin/contracts/utils/SlotDerivation.sol\":{\"keccak256\":\"0x67672e4ca1dafdcc661d4eba8475cfac631fa0933309258e3af7644b92e1fb26\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30192451f05ea5ddb0c18bd0f9003f098505836ba19c08a9c365adf829454da2\",\"dweb:/ipfs/QmfCuZSCTyCdFoSKn7MSaN6hZksnQn9ZhrZDAdRTCbwGu2\"]},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617\",\"dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x1225214420c83ebcca88f2ae2b50f053aaa7df7bd684c3e878d334627f2edfc6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c5fab4970634f9ab9a620983dc1c8a30153981a0b1a521666e269d0a11399d3\",\"dweb:/ipfs/QmVRnBC575MESGkEHndjujtR7qub2FzU9RWy9eKLp4hPZB\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol": {
        "ContextUpgradeable": {
          "abi": [
            {
              "inputs": [],
              "name": "InvalidInitialization",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "NotInitializing",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint64",
                  "name": "version",
                  "type": "uint64"
                }
              ],
              "name": "Initialized",
              "type": "event"
            }
          ],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"}],\"devdoc\":{\"details\":\"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.\",\"errors\":{\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"}},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":\"ContextUpgradeable\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0xdb4d24ee2c087c391d587cd17adfe5b3f9d93b3110b1388c2ab6c7c0ad1dcd05\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ab7b6d5b9e2b88176312967fe0f0e78f3d9a1422fa5e4b64e2440c35869b5d08\",\"dweb:/ipfs/QmXKYWWyzcLg1B2k7Sb1qkEXgLCYfXecR9wYW5obRzWP1Q\"]},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9\",\"dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol": {
        "PausableUpgradeable": {
          "abi": [
            {
              "inputs": [],
              "name": "EnforcedPause",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "ExpectedPause",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "InvalidInitialization",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "NotInitializing",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint64",
                  "name": "version",
                  "type": "uint64"
                }
              ],
              "name": "Initialized",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "Paused",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "Unpaused",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "paused",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "paused()": "5c975abb"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"EnforcedPause\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExpectedPause\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Contract module which allows children to implement an emergency stop mechanism that can be triggered by an authorized account. This module is used through inheritance. It will make available the modifiers `whenNotPaused` and `whenPaused`, which can be applied to the functions of your contract. Note that they will not be pausable by simply including this module, only once the modifiers are put in place.\",\"errors\":{\"EnforcedPause()\":[{\"details\":\"The operation failed because the contract is paused.\"}],\"ExpectedPause()\":[{\"details\":\"The operation failed because the contract is not paused.\"}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"Paused(address)\":{\"details\":\"Emitted when the pause is triggered by `account`.\"},\"Unpaused(address)\":{\"details\":\"Emitted when the pause is lifted by `account`.\"}},\"kind\":\"dev\",\"methods\":{\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol\":\"PausableUpgradeable\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0xdb4d24ee2c087c391d587cd17adfe5b3f9d93b3110b1388c2ab6c7c0ad1dcd05\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ab7b6d5b9e2b88176312967fe0f0e78f3d9a1422fa5e4b64e2440c35869b5d08\",\"dweb:/ipfs/QmXKYWWyzcLg1B2k7Sb1qkEXgLCYfXecR9wYW5obRzWP1Q\"]},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9\",\"dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV\"]},\"@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol\":{\"keccak256\":\"0xa6bf6b7efe0e6625a9dcd30c5ddf52c4c24fe8372f37c7de9dbf5034746768d5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8c353ee3705bbf6fadb84c0fb10ef1b736e8ca3ca1867814349d1487ed207beb\",\"dweb:/ipfs/QmcugaPssrzGGE8q4YZKm2ZhnD3kCijjcgdWWg76nWt3FY\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol": {
        "ERC165Upgradeable": {
          "abi": [
            {
              "inputs": [],
              "name": "InvalidInitialization",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "NotInitializing",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint64",
                  "name": "version",
                  "type": "uint64"
                }
              ],
              "name": "Initialized",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes4",
                  "name": "interfaceId",
                  "type": "bytes4"
                }
              ],
              "name": "supportsInterface",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "supportsInterface(bytes4)": "01ffc9a7"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Implementation of the {IERC165} interface. Contracts that want to implement ERC-165 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); } ```\",\"errors\":{\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"}},\"kind\":\"dev\",\"methods\":{\"supportsInterface(bytes4)\":{\"details\":\"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[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol\":\"ERC165Upgradeable\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0xdb4d24ee2c087c391d587cd17adfe5b3f9d93b3110b1388c2ab6c7c0ad1dcd05\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ab7b6d5b9e2b88176312967fe0f0e78f3d9a1422fa5e4b64e2440c35869b5d08\",\"dweb:/ipfs/QmXKYWWyzcLg1B2k7Sb1qkEXgLCYfXecR9wYW5obRzWP1Q\"]},\"@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol\":{\"keccak256\":\"0x6694b63ddb2c59bbe341c846171798350e8f72fa02189fcdeaca864e28b54e1f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d945d33e2189ac4e531e4ed228f59ca957b3898c4f9051f4b8c7ae44d72b23a\",\"dweb:/ipfs/QmRcEwubTe3xyXxthijs5fVzEgUFSxeddjd5PGfhBnkunX\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617\",\"dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/access/IAccessControl.sol": {
        "IAccessControl": {
          "abi": [
            {
              "inputs": [],
              "name": "AccessControlBadConfirmation",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                },
                {
                  "internalType": "bytes32",
                  "name": "neededRole",
                  "type": "bytes32"
                }
              ],
              "name": "AccessControlUnauthorizedAccount",
              "type": "error"
            },
            {
              "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"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes32",
                  "name": "role",
                  "type": "bytes32"
                }
              ],
              "name": "getRoleAdmin",
              "outputs": [
                {
                  "internalType": "bytes32",
                  "name": "",
                  "type": "bytes32"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes32",
                  "name": "role",
                  "type": "bytes32"
                },
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "grantRole",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes32",
                  "name": "role",
                  "type": "bytes32"
                },
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "hasRole",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "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"
            }
          ],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "getRoleAdmin(bytes32)": "248a9ca3",
              "grantRole(bytes32,address)": "2f2ff15d",
              "hasRole(bytes32,address)": "91d14854",
              "renounceRole(bytes32,address)": "36568abe",
              "revokeRole(bytes32,address)": "d547741f"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"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\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"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\"}],\"devdoc\":{\"details\":\"External interface of AccessControl declared to support ERC-165 detection.\",\"errors\":{\"AccessControlBadConfirmation()\":[{\"details\":\"The caller of a function is not the expected one. NOTE: Don't confuse with {AccessControlUnauthorizedAccount}.\"}],\"AccessControlUnauthorizedAccount(address,bytes32)\":[{\"details\":\"The `account` is missing a role.\"}]},\"events\":{\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted to signal this.\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call. This account bears the admin role (for the granted role). Expected in cases where the role was granted using the internal {AccessControl-_grantRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"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`)\"}},\"kind\":\"dev\",\"methods\":{\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {AccessControl-_setRoleAdmin}.\"},\"grantRole(bytes32,address)\":{\"details\":\"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.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"renounceRole(bytes32,address)\":{\"details\":\"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`.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/access/IAccessControl.sol\":\"IAccessControl\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/access/IAccessControl.sol\":{\"keccak256\":\"0xbff9f59c84e5337689161ce7641c0ef8e872d6a7536fbc1f5133f128887aba3c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b308f882e796f7b79c9502deacb0a62983035c6f6f4e962b319ba6a1f4a77d3d\",\"dweb:/ipfs/QmaWCW7ahEQqFjwhSUhV7Ae7WhfNvzSpE7DQ58hvEooqPL\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/interfaces/IERC1967.sol": {
        "IERC1967": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "previousAdmin",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "newAdmin",
                  "type": "address"
                }
              ],
              "name": "AdminChanged",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "beacon",
                  "type": "address"
                }
              ],
              "name": "BeaconUpgraded",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "implementation",
                  "type": "address"
                }
              ],
              "name": "Upgraded",
              "type": "event"
            }
          ],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"}],\"devdoc\":{\"details\":\"ERC-1967: Proxy Storage Slots. This interface contains the events defined in the ERC.\",\"events\":{\"AdminChanged(address,address)\":{\"details\":\"Emitted when the admin account has changed.\"},\"BeaconUpgraded(address)\":{\"details\":\"Emitted when the beacon is changed.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/IERC1967.sol\":\"IERC1967\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/IERC1967.sol\":{\"keccak256\":\"0xbf2aefe54b76d7f7bcd4f6da1080b7b1662611937d870b880db584d09cea56b5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5e7e2f12e0feec75296e57f51f82fdaa8bd1551f4b8cc6560442c0bf60f818c\",\"dweb:/ipfs/QmcW9wDMaQ8RbQibMarfp17a3bABzY5KraWe2YDwuUrUoz\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/interfaces/draft-IERC1822.sol": {
        "IERC1822Proxiable": {
          "abi": [
            {
              "inputs": [],
              "name": "proxiableUUID",
              "outputs": [
                {
                  "internalType": "bytes32",
                  "name": "",
                  "type": "bytes32"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "proxiableUUID()": "52d1902d"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"ERC-1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified proxy whose upgrades are fully controlled by the current implementation.\",\"kind\":\"dev\",\"methods\":{\"proxiableUUID()\":{\"details\":\"Returns the storage slot that the proxiable contract assumes is being used to store the implementation address. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/draft-IERC1822.sol\":\"IERC1822Proxiable\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/draft-IERC1822.sol\":{\"keccak256\":\"0x82f757819bf2429a0d4db141b99a4bbe5039e4ef86dfb94e2e6d40577ed5b28b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://37c30ed931e19fb71fdb806bb504cfdb9913b7127545001b64d4487783374422\",\"dweb:/ipfs/QmUBHpv4hm3ZmwJ4GH8BeVzK4mv41Q6vBbWXxn8HExPXza\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/interfaces/draft-IERC6093.sol": {
        "IERC1155Errors": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "balance",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "needed",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "ERC1155InsufficientBalance",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "approver",
                  "type": "address"
                }
              ],
              "name": "ERC1155InvalidApprover",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "idsLength",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "valuesLength",
                  "type": "uint256"
                }
              ],
              "name": "ERC1155InvalidArrayLength",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                }
              ],
              "name": "ERC1155InvalidOperator",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "receiver",
                  "type": "address"
                }
              ],
              "name": "ERC1155InvalidReceiver",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                }
              ],
              "name": "ERC1155InvalidSender",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "ERC1155MissingApprovalForAll",
              "type": "error"
            }
          ],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC1155InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC1155InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"idsLength\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"valuesLength\",\"type\":\"uint256\"}],\"name\":\"ERC1155InvalidArrayLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"ERC1155InvalidOperator\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC1155InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC1155InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC1155MissingApprovalForAll\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Standard ERC-1155 Errors Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 tokens.\",\"errors\":{\"ERC1155InsufficientBalance(address,uint256,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC1155InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC1155InvalidArrayLength(uint256,uint256)\":[{\"details\":\"Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation. Used in batch transfers.\",\"params\":{\"idsLength\":\"Length of the array of token identifiers\",\"valuesLength\":\"Length of the array of token amounts\"}}],\"ERC1155InvalidOperator(address)\":[{\"details\":\"Indicates a failure with the `operator` to be approved. Used in approvals.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC1155InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC1155InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC1155MissingApprovalForAll(address,address)\":[{\"details\":\"Indicates a failure with the `operator`\\u2019s approval. Used in transfers.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\",\"owner\":\"Address of the current owner of a token.\"}}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":\"IERC1155Errors\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x19fdfb0f3b89a230e7dbd1cf416f1a6b531a3ee5db4da483f946320fc74afc0e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3490d794728f5bfecb46820431adaff71ba374141545ec20b650bb60353fac23\",\"dweb:/ipfs/QmPsfxjVpMcZbpE7BH93DzTpEaktESigEw4SmDzkXuJ4WR\"]}},\"version\":1}"
        },
        "IERC20Errors": {
          "abi": [
            {
              "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"
            }
          ],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"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\"}],\"devdoc\":{\"details\":\"Standard ERC-20 Errors Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens.\",\"errors\":{\"ERC20InsufficientAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\",\"params\":{\"allowance\":\"Amount of tokens a `spender` is allowed to operate with.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC20InsufficientBalance(address,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC20InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC20InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidSpender(address)\":[{\"details\":\"Indicates a failure with the `spender` to be approved. Used in approvals.\",\"params\":{\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":\"IERC20Errors\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x19fdfb0f3b89a230e7dbd1cf416f1a6b531a3ee5db4da483f946320fc74afc0e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3490d794728f5bfecb46820431adaff71ba374141545ec20b650bb60353fac23\",\"dweb:/ipfs/QmPsfxjVpMcZbpE7BH93DzTpEaktESigEw4SmDzkXuJ4WR\"]}},\"version\":1}"
        },
        "IERC721Errors": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "ERC721IncorrectOwner",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "ERC721InsufficientApproval",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "approver",
                  "type": "address"
                }
              ],
              "name": "ERC721InvalidApprover",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                }
              ],
              "name": "ERC721InvalidOperator",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "ERC721InvalidOwner",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "receiver",
                  "type": "address"
                }
              ],
              "name": "ERC721InvalidReceiver",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                }
              ],
              "name": "ERC721InvalidSender",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "ERC721NonexistentToken",
              "type": "error"
            }
          ],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC721IncorrectOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC721InsufficientApproval\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC721InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"ERC721InvalidOperator\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC721InvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC721InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC721InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC721NonexistentToken\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Standard ERC-721 Errors Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens.\",\"errors\":{\"ERC721IncorrectOwner(address,uint256,address)\":[{\"details\":\"Indicates an error related to the ownership over a particular token. Used in transfers.\",\"params\":{\"owner\":\"Address of the current owner of a token.\",\"sender\":\"Address whose tokens are being transferred.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC721InsufficientApproval(address,uint256)\":[{\"details\":\"Indicates a failure with the `operator`\\u2019s approval. Used in transfers.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC721InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC721InvalidOperator(address)\":[{\"details\":\"Indicates a failure with the `operator` to be approved. Used in approvals.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC721InvalidOwner(address)\":[{\"details\":\"Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-20. Used in balance queries.\",\"params\":{\"owner\":\"Address of the current owner of a token.\"}}],\"ERC721InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC721InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC721NonexistentToken(uint256)\":[{\"details\":\"Indicates a `tokenId` whose `owner` is the zero address.\",\"params\":{\"tokenId\":\"Identifier number of a token.\"}}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":\"IERC721Errors\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x19fdfb0f3b89a230e7dbd1cf416f1a6b531a3ee5db4da483f946320fc74afc0e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3490d794728f5bfecb46820431adaff71ba374141545ec20b650bb60353fac23\",\"dweb:/ipfs/QmPsfxjVpMcZbpE7BH93DzTpEaktESigEw4SmDzkXuJ4WR\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol": {
        "ERC1967Utils": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "admin",
                  "type": "address"
                }
              ],
              "name": "ERC1967InvalidAdmin",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "beacon",
                  "type": "address"
                }
              ],
              "name": "ERC1967InvalidBeacon",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "implementation",
                  "type": "address"
                }
              ],
              "name": "ERC1967InvalidImplementation",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "ERC1967NonPayable",
              "type": "error"
            }
          ],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "60808060405234601757603a9081601d823930815050f35b600080fdfe600080fdfea264697066735822122021f229cc44e125055ec552d931be302306bd1deeb95b14f9cabad70ba1cf564864736f6c634300081b0033",
              "opcodes": "PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x3A SWAP1 DUP2 PUSH1 0x1D DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH1 0x0 DUP1 REVERT INVALID PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x21 CALLCODE 0x29 0xCC PREVRANDAO 0xE1 0x25 SDIV MCOPY 0xC5 MSTORE 0xD9 BALANCE 0xBE ADDRESS 0x23 MOD 0xBD SAR 0xEE 0xB9 JUMPDEST EQ 0xF9 0xCA 0xBA 0xD7 SIGNEXTEND LOG1 0xCF JUMP BASEFEE PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ",
              "sourceMap": "496:5741:13:-:0;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "600080fdfea264697066735822122021f229cc44e125055ec552d931be302306bd1deeb95b14f9cabad70ba1cf564864736f6c634300081b0033",
              "opcodes": "PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x21 CALLCODE 0x29 0xCC PREVRANDAO 0xE1 0x25 SDIV MCOPY 0xC5 MSTORE 0xD9 BALANCE 0xBE ADDRESS 0x23 MOD 0xBD SAR 0xEE 0xB9 JUMPDEST EQ 0xF9 0xCA 0xBA 0xD7 SIGNEXTEND LOG1 0xCF JUMP BASEFEE PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ",
              "sourceMap": "496:5741:13:-:0;;"
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidAdmin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidBeacon\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC1967NonPayable\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"This library provides getters and event emitting update functions for https://eips.ethereum.org/EIPS/eip-1967[ERC-1967] slots.\",\"errors\":{\"ERC1967InvalidAdmin(address)\":[{\"details\":\"The `admin` of the proxy is invalid.\"}],\"ERC1967InvalidBeacon(address)\":[{\"details\":\"The `beacon` of the proxy is invalid.\"}],\"ERC1967InvalidImplementation(address)\":[{\"details\":\"The `implementation` of the proxy is invalid.\"}],\"ERC1967NonPayable()\":[{\"details\":\"An upgrade function sees `msg.value > 0` that may be lost.\"}]},\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"ADMIN_SLOT\":{\"details\":\"Storage slot with the admin of the contract. This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1.\"},\"BEACON_SLOT\":{\"details\":\"The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy. This is the keccak-256 hash of \\\"eip1967.proxy.beacon\\\" subtracted by 1.\"},\"IMPLEMENTATION_SLOT\":{\"details\":\"Storage slot with the address of the current implementation. This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol\":\"ERC1967Utils\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/IERC1967.sol\":{\"keccak256\":\"0xbf2aefe54b76d7f7bcd4f6da1080b7b1662611937d870b880db584d09cea56b5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5e7e2f12e0feec75296e57f51f82fdaa8bd1551f4b8cc6560442c0bf60f818c\",\"dweb:/ipfs/QmcW9wDMaQ8RbQibMarfp17a3bABzY5KraWe2YDwuUrUoz\"]},\"@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0xa1ad192cd45317c788618bef5cb1fb3ca4ce8b230f6433ac68cc1d850fb81618\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b43447bb85a53679d269a403c693b9d88d6c74177dfb35eddca63abaf7cf110a\",\"dweb:/ipfs/QmXSDmpd4bNZj1PDgegr6C4w1jDaWHXCconC3rYiw9TSkQ\"]},\"@openzeppelin/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0x20462ddb2665e9521372c76b001d0ce196e59dbbd989de9af5576cad0bd5628b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f417fd12aeec8fbfaceaa30e3a08a0724c0bc39de363e2acf6773c897abbaf6d\",\"dweb:/ipfs/QmU4Hko6sApdweVM92CsiuLKkCk8HfyBeutF89PCTz5Tye\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x6d0ae6e206645341fd122d278c2cb643dea260c190531f2f3f6a0426e77b00c0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://032d1201d839435be2c85b72e33206b3ea980c569d6ebf7fa57d811ab580a82f\",\"dweb:/ipfs/QmeqQjAtMvdZT2tG7zm39itcRJkuwu8AEReK6WRnLJ18DD\"]},\"@openzeppelin/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/proxy/beacon/IBeacon.sol": {
        "IBeacon": {
          "abi": [
            {
              "inputs": [],
              "name": "implementation",
              "outputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "implementation()": "5c60da1b"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This is the interface that {BeaconProxy} expects of its beacon.\",\"kind\":\"dev\",\"methods\":{\"implementation()\":{\"details\":\"Must return an address that can be used as a delegate call target. {UpgradeableBeacon} will check that this address is a contract.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/proxy/beacon/IBeacon.sol\":\"IBeacon\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0x20462ddb2665e9521372c76b001d0ce196e59dbbd989de9af5576cad0bd5628b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f417fd12aeec8fbfaceaa30e3a08a0724c0bc39de363e2acf6773c897abbaf6d\",\"dweb:/ipfs/QmU4Hko6sApdweVM92CsiuLKkCk8HfyBeutF89PCTz5Tye\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/token/ERC1155/IERC1155.sol": {
        "IERC1155": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "bool",
                  "name": "approved",
                  "type": "bool"
                }
              ],
              "name": "ApprovalForAll",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256[]",
                  "name": "ids",
                  "type": "uint256[]"
                },
                {
                  "indexed": false,
                  "internalType": "uint256[]",
                  "name": "values",
                  "type": "uint256[]"
                }
              ],
              "name": "TransferBatch",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "id",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "TransferSingle",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "string",
                  "name": "value",
                  "type": "string"
                },
                {
                  "indexed": true,
                  "internalType": "uint256",
                  "name": "id",
                  "type": "uint256"
                }
              ],
              "name": "URI",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "id",
                  "type": "uint256"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address[]",
                  "name": "accounts",
                  "type": "address[]"
                },
                {
                  "internalType": "uint256[]",
                  "name": "ids",
                  "type": "uint256[]"
                }
              ],
              "name": "balanceOfBatch",
              "outputs": [
                {
                  "internalType": "uint256[]",
                  "name": "",
                  "type": "uint256[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                }
              ],
              "name": "isApprovedForAll",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256[]",
                  "name": "ids",
                  "type": "uint256[]"
                },
                {
                  "internalType": "uint256[]",
                  "name": "values",
                  "type": "uint256[]"
                },
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "name": "safeBatchTransferFrom",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "id",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "name": "safeTransferFrom",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                },
                {
                  "internalType": "bool",
                  "name": "approved",
                  "type": "bool"
                }
              ],
              "name": "setApprovalForAll",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes4",
                  "name": "interfaceId",
                  "type": "bytes4"
                }
              ],
              "name": "supportsInterface",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "balanceOf(address,uint256)": "00fdd58e",
              "balanceOfBatch(address[],uint256[])": "4e1273f4",
              "isApprovedForAll(address,address)": "e985e9c5",
              "safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)": "2eb2c2d6",
              "safeTransferFrom(address,address,uint256,uint256,bytes)": "f242432a",
              "setApprovalForAll(address,bool)": "a22cb465",
              "supportsInterface(bytes4)": "01ffc9a7"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"}],\"name\":\"TransferBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"TransferSingle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"value\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"URI\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"accounts\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"}],\"name\":\"balanceOfBatch\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeBatchTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Required interface of an ERC-1155 compliant contract, as defined in the https://eips.ethereum.org/EIPS/eip-1155[ERC].\",\"events\":{\"ApprovalForAll(address,address,bool)\":{\"details\":\"Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to `approved`.\"},\"TransferBatch(address,address,address,uint256[],uint256[])\":{\"details\":\"Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all transfers.\"},\"TransferSingle(address,address,address,uint256,uint256)\":{\"details\":\"Emitted when `value` amount of tokens of type `id` are transferred from `from` to `to` by `operator`.\"},\"URI(string,uint256)\":{\"details\":\"Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. If an {URI} event was emitted for `id`, the standard https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value returned by {IERC1155MetadataURI-uri}.\"}},\"kind\":\"dev\",\"methods\":{\"balanceOf(address,uint256)\":{\"details\":\"Returns the value of tokens of token type `id` owned by `account`.\"},\"balanceOfBatch(address[],uint256[])\":{\"details\":\"xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. Requirements: - `accounts` and `ids` must have the same length.\"},\"isApprovedForAll(address,address)\":{\"details\":\"Returns true if `operator` is approved to transfer ``account``'s tokens. See {setApprovalForAll}.\"},\"safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)\":{\"details\":\"xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. WARNING: This function can potentially allow a reentrancy attack when transferring tokens to an untrusted contract, when invoking {IERC1155Receiver-onERC1155BatchReceived} on the receiver. Ensure to follow the checks-effects-interactions pattern and consider employing reentrancy guards when interacting with untrusted contracts. Emits either a {TransferSingle} or a {TransferBatch} event, depending on the length of the array arguments. Requirements: - `ids` and `values` must have the same length. - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the acceptance magic value.\"},\"safeTransferFrom(address,address,uint256,uint256,bytes)\":{\"details\":\"Transfers a `value` amount of tokens of type `id` from `from` to `to`. WARNING: This function can potentially allow a reentrancy attack when transferring tokens to an untrusted contract, when invoking {IERC1155Receiver-onERC1155Received} on the receiver. Ensure to follow the checks-effects-interactions pattern and consider employing reentrancy guards when interacting with untrusted contracts. Emits a {TransferSingle} event. Requirements: - `to` cannot be the zero address. - If the caller is not `from`, it must have been approved to spend ``from``'s tokens via {setApprovalForAll}. - `from` must have a balance of tokens of type `id` of at least `value` amount. - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the acceptance magic value.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, Emits an {ApprovalForAll} event. Requirements: - `operator` cannot be the zero address.\"},\"supportsInterface(bytes4)\":{\"details\":\"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[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC1155/IERC1155.sol\":\"IERC1155\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/token/ERC1155/IERC1155.sol\":{\"keccak256\":\"0xf189f9b417fe1931e1ab706838aff1128528694a9fcdb5ff7665197f2ca57d09\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2ff0143c836c8c9f85d13708733c09e21251395847fccfb518bf3b556726a840\",\"dweb:/ipfs/QmP69sjjrQrhYAsvCSSB69Bx66SiUPdQUqdzMYnf4wANHm\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617\",\"dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol": {
        "IERC1155Receiver": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "uint256[]",
                  "name": "ids",
                  "type": "uint256[]"
                },
                {
                  "internalType": "uint256[]",
                  "name": "values",
                  "type": "uint256[]"
                },
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "name": "onERC1155BatchReceived",
              "outputs": [
                {
                  "internalType": "bytes4",
                  "name": "",
                  "type": "bytes4"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "id",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "name": "onERC1155Received",
              "outputs": [
                {
                  "internalType": "bytes4",
                  "name": "",
                  "type": "bytes4"
                }
              ],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes4",
                  "name": "interfaceId",
                  "type": "bytes4"
                }
              ],
              "name": "supportsInterface",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)": "bc197c81",
              "onERC1155Received(address,address,uint256,uint256,bytes)": "f23a6e61",
              "supportsInterface(bytes4)": "01ffc9a7"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"onERC1155BatchReceived\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"onERC1155Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface that must be implemented by smart contracts in order to receive ERC-1155 token transfers.\",\"kind\":\"dev\",\"methods\":{\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\":{\"details\":\"Handles the receipt of a multiple ERC-1155 token types. This function is called at the end of a `safeBatchTransferFrom` after the balances have been updated. NOTE: To accept the transfer(s), this must return `bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))` (i.e. 0xbc197c81, or its own function selector).\",\"params\":{\"data\":\"Additional data with no specified format\",\"from\":\"The address which previously owned the token\",\"ids\":\"An array containing ids of each token being transferred (order and length must match values array)\",\"operator\":\"The address which initiated the batch transfer (i.e. msg.sender)\",\"values\":\"An array containing amounts of each token being transferred (order and length must match ids array)\"},\"returns\":{\"_0\":\"`bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))` if transfer is allowed\"}},\"onERC1155Received(address,address,uint256,uint256,bytes)\":{\"details\":\"Handles the receipt of a single ERC-1155 token type. This function is called at the end of a `safeTransferFrom` after the balance has been updated. NOTE: To accept the transfer, this must return `bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))` (i.e. 0xf23a6e61, or its own function selector).\",\"params\":{\"data\":\"Additional data with no specified format\",\"from\":\"The address which previously owned the token\",\"id\":\"The ID of the token being transferred\",\"operator\":\"The address which initiated the transfer (i.e. msg.sender)\",\"value\":\"The amount of tokens being transferred\"},\"returns\":{\"_0\":\"`bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))` if transfer is allowed\"}},\"supportsInterface(bytes4)\":{\"details\":\"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[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol\":\"IERC1155Receiver\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol\":{\"keccak256\":\"0x6ec6d7fce29668ede560c7d2e10f9d10de3473f5298e431e70a5767db42fa620\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ac0139e51874aeec0730d040e57993187541777eb01d5939c06d5d2b986a54e8\",\"dweb:/ipfs/QmZbMbdPzusXuX9FGkyArV8hgzKLBZaL5RzMtCdCawtwPF\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617\",\"dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol": {
        "IERC1155MetadataURI": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "bool",
                  "name": "approved",
                  "type": "bool"
                }
              ],
              "name": "ApprovalForAll",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256[]",
                  "name": "ids",
                  "type": "uint256[]"
                },
                {
                  "indexed": false,
                  "internalType": "uint256[]",
                  "name": "values",
                  "type": "uint256[]"
                }
              ],
              "name": "TransferBatch",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "id",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "TransferSingle",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "string",
                  "name": "value",
                  "type": "string"
                },
                {
                  "indexed": true,
                  "internalType": "uint256",
                  "name": "id",
                  "type": "uint256"
                }
              ],
              "name": "URI",
              "type": "event"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "id",
                  "type": "uint256"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address[]",
                  "name": "accounts",
                  "type": "address[]"
                },
                {
                  "internalType": "uint256[]",
                  "name": "ids",
                  "type": "uint256[]"
                }
              ],
              "name": "balanceOfBatch",
              "outputs": [
                {
                  "internalType": "uint256[]",
                  "name": "",
                  "type": "uint256[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                }
              ],
              "name": "isApprovedForAll",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256[]",
                  "name": "ids",
                  "type": "uint256[]"
                },
                {
                  "internalType": "uint256[]",
                  "name": "values",
                  "type": "uint256[]"
                },
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "name": "safeBatchTransferFrom",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "id",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "name": "safeTransferFrom",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                },
                {
                  "internalType": "bool",
                  "name": "approved",
                  "type": "bool"
                }
              ],
              "name": "setApprovalForAll",
              "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": [
                {
                  "internalType": "uint256",
                  "name": "id",
                  "type": "uint256"
                }
              ],
              "name": "uri",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "balanceOf(address,uint256)": "00fdd58e",
              "balanceOfBatch(address[],uint256[])": "4e1273f4",
              "isApprovedForAll(address,address)": "e985e9c5",
              "safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)": "2eb2c2d6",
              "safeTransferFrom(address,address,uint256,uint256,bytes)": "f242432a",
              "setApprovalForAll(address,bool)": "a22cb465",
              "supportsInterface(bytes4)": "01ffc9a7",
              "uri(uint256)": "0e89341c"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"}],\"name\":\"TransferBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"TransferSingle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"value\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"URI\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"accounts\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"}],\"name\":\"balanceOfBatch\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeBatchTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"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\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"uri\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the optional ERC1155MetadataExtension interface, as defined in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[ERC].\",\"events\":{\"ApprovalForAll(address,address,bool)\":{\"details\":\"Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to `approved`.\"},\"TransferBatch(address,address,address,uint256[],uint256[])\":{\"details\":\"Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all transfers.\"},\"TransferSingle(address,address,address,uint256,uint256)\":{\"details\":\"Emitted when `value` amount of tokens of type `id` are transferred from `from` to `to` by `operator`.\"},\"URI(string,uint256)\":{\"details\":\"Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. If an {URI} event was emitted for `id`, the standard https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value returned by {IERC1155MetadataURI-uri}.\"}},\"kind\":\"dev\",\"methods\":{\"balanceOf(address,uint256)\":{\"details\":\"Returns the value of tokens of token type `id` owned by `account`.\"},\"balanceOfBatch(address[],uint256[])\":{\"details\":\"xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. Requirements: - `accounts` and `ids` must have the same length.\"},\"isApprovedForAll(address,address)\":{\"details\":\"Returns true if `operator` is approved to transfer ``account``'s tokens. See {setApprovalForAll}.\"},\"safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)\":{\"details\":\"xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. WARNING: This function can potentially allow a reentrancy attack when transferring tokens to an untrusted contract, when invoking {IERC1155Receiver-onERC1155BatchReceived} on the receiver. Ensure to follow the checks-effects-interactions pattern and consider employing reentrancy guards when interacting with untrusted contracts. Emits either a {TransferSingle} or a {TransferBatch} event, depending on the length of the array arguments. Requirements: - `ids` and `values` must have the same length. - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the acceptance magic value.\"},\"safeTransferFrom(address,address,uint256,uint256,bytes)\":{\"details\":\"Transfers a `value` amount of tokens of type `id` from `from` to `to`. WARNING: This function can potentially allow a reentrancy attack when transferring tokens to an untrusted contract, when invoking {IERC1155Receiver-onERC1155Received} on the receiver. Ensure to follow the checks-effects-interactions pattern and consider employing reentrancy guards when interacting with untrusted contracts. Emits a {TransferSingle} event. Requirements: - `to` cannot be the zero address. - If the caller is not `from`, it must have been approved to spend ``from``'s tokens via {setApprovalForAll}. - `from` must have a balance of tokens of type `id` of at least `value` amount. - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the acceptance magic value.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, Emits an {ApprovalForAll} event. Requirements: - `operator` cannot be the zero address.\"},\"supportsInterface(bytes4)\":{\"details\":\"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[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"},\"uri(uint256)\":{\"details\":\"Returns the URI for token type `id`. If the `\\\\{id\\\\}` substring is present in the URI, it must be replaced by clients with the actual token type ID.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol\":\"IERC1155MetadataURI\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/token/ERC1155/IERC1155.sol\":{\"keccak256\":\"0xf189f9b417fe1931e1ab706838aff1128528694a9fcdb5ff7665197f2ca57d09\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2ff0143c836c8c9f85d13708733c09e21251395847fccfb518bf3b556726a840\",\"dweb:/ipfs/QmP69sjjrQrhYAsvCSSB69Bx66SiUPdQUqdzMYnf4wANHm\"]},\"@openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol\":{\"keccak256\":\"0x98c32de9b02f43eba7c0aba9fadf331cffb35a8d2076dce1d556c8f2cad704aa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38f68f76e741cce3ca4e0f8ece5ab9d69a203829311a403bafc8f7b95a7e6d63\",\"dweb:/ipfs/QmZ8PrDXU5DiZ7fzEoRN7vHMQdemtsqvYVV5AdvAnScS4o\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617\",\"dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/token/ERC1155/utils/ERC1155Utils.sol": {
        "ERC1155Utils": {
          "abi": [],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "60808060405234601757603a9081601d823930815050f35b600080fdfe600080fdfea2646970667358221220478e1902308ec33252404da1665fb07dca43e11e42a7728853aecb939348918664736f6c634300081b0033",
              "opcodes": "PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x3A SWAP1 DUP2 PUSH1 0x1D DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH1 0x0 DUP1 REVERT INVALID PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SELFBALANCE DUP15 NOT MUL ADDRESS DUP15 0xC3 ORIGIN MSTORE BLOCKHASH 0x4D LOG1 PUSH7 0x5FB07DCA43E11E TIMESTAMP 0xA7 PUSH19 0x8853AECB939348918664736F6C634300081B00 CALLER ",
              "sourceMap": "439:3114:18:-:0;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "600080fdfea2646970667358221220478e1902308ec33252404da1665fb07dca43e11e42a7728853aecb939348918664736f6c634300081b0033",
              "opcodes": "PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SELFBALANCE DUP15 NOT MUL ADDRESS DUP15 0xC3 ORIGIN MSTORE BLOCKHASH 0x4D LOG1 PUSH7 0x5FB07DCA43E11E TIMESTAMP 0xA7 PUSH19 0x8853AECB939348918664736F6C634300081B00 CALLER ",
              "sourceMap": "439:3114:18:-:0;;"
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Library that provide common ERC-1155 utility functions. See https://eips.ethereum.org/EIPS/eip-1155[ERC-1155]. _Available since v5.1._\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC1155/utils/ERC1155Utils.sol\":\"ERC1155Utils\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x19fdfb0f3b89a230e7dbd1cf416f1a6b531a3ee5db4da483f946320fc74afc0e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3490d794728f5bfecb46820431adaff71ba374141545ec20b650bb60353fac23\",\"dweb:/ipfs/QmPsfxjVpMcZbpE7BH93DzTpEaktESigEw4SmDzkXuJ4WR\"]},\"@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol\":{\"keccak256\":\"0x6ec6d7fce29668ede560c7d2e10f9d10de3473f5298e431e70a5767db42fa620\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ac0139e51874aeec0730d040e57993187541777eb01d5939c06d5d2b986a54e8\",\"dweb:/ipfs/QmZbMbdPzusXuX9FGkyArV8hgzKLBZaL5RzMtCdCawtwPF\"]},\"@openzeppelin/contracts/token/ERC1155/utils/ERC1155Utils.sol\":{\"keccak256\":\"0xaeca1511f7da49bdb16e44aa0f09dca76b51ba079bd068b2f80b8fe6d22b5fa1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://542fe084e72e14f4298954f70c407d5795c1207a02c049f9b91e15f3b9a525a5\",\"dweb:/ipfs/QmbPQMVUVZBE9R9Va6FNfZBTrUY51nrjm8qxpeoAoRrPrQ\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617\",\"dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/utils/Address.sol": {
        "Address": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "target",
                  "type": "address"
                }
              ],
              "name": "AddressEmptyCode",
              "type": "error"
            }
          ],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "60808060405234601757603a9081601d823930815050f35b600080fdfe600080fdfea26469706673582212201f98aa213073847cfdf46f4886b29bb00675a97cd9e16da77d60c69caa9ae7fe64736f6c634300081b0033",
              "opcodes": "PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x3A SWAP1 DUP2 PUSH1 0x1D DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH1 0x0 DUP1 REVERT INVALID PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x1F SWAP9 0xAA 0x21 ADDRESS PUSH20 0x847CFDF46F4886B29BB00675A97CD9E16DA77D60 0xC6 SWAP13 0xAA SWAP11 0xE7 INVALID PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ",
              "sourceMap": "233:5762:19:-:0;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "600080fdfea26469706673582212201f98aa213073847cfdf46f4886b29bb00675a97cd9e16da77d60c69caa9ae7fe64736f6c634300081b0033",
              "opcodes": "PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x1F SWAP9 0xAA 0x21 ADDRESS PUSH20 0x847CFDF46F4886B29BB00675A97CD9E16DA77D60 0xC6 SWAP13 0xAA SWAP11 0xE7 INVALID PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ",
              "sourceMap": "233:5762:19:-:0;;"
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Collection of functions related to the address type\",\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Address.sol\":\"Address\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x6d0ae6e206645341fd122d278c2cb643dea260c190531f2f3f6a0426e77b00c0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://032d1201d839435be2c85b72e33206b3ea980c569d6ebf7fa57d811ab580a82f\",\"dweb:/ipfs/QmeqQjAtMvdZT2tG7zm39itcRJkuwu8AEReK6WRnLJ18DD\"]},\"@openzeppelin/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/utils/Arrays.sol": {
        "Arrays": {
          "abi": [],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "60808060405234601757603a9081601d823930815050f35b600080fdfe600080fdfea2646970667358221220e59c7c4b154ac158e56e6a3594626b24f473a4b050faf09f9b15ce652cedda0464736f6c634300081b0033",
              "opcodes": "PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x3A SWAP1 DUP2 PUSH1 0x1D DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH1 0x0 DUP1 REVERT INVALID PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE5 SWAP13 PUSH29 0x4B154AC158E56E6A3594626B24F473A4B050FAF09F9B15CE652CEDDA04 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ",
              "sourceMap": "459:20446:20:-:0;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "600080fdfea2646970667358221220e59c7c4b154ac158e56e6a3594626b24f473a4b050faf09f9b15ce652cedda0464736f6c634300081b0033",
              "opcodes": "PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE5 SWAP13 PUSH29 0x4B154AC158E56E6A3594626B24F473A4B050FAF09F9B15CE652CEDDA04 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ",
              "sourceMap": "459:20446:20:-:0;;"
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Collection of functions related to array types.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Arrays.sol\":\"Arrays\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/Arrays.sol\":{\"keccak256\":\"0xa4b9958797e0e9cde82a090525e90f80d5745ba1c67ee72b488bd3087498a17e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c9344f7c2f80322c2e76d9d89bed03fd12f3e011e74fde7cf24ea21bdd2abe2d\",\"dweb:/ipfs/QmPMAjF5x2fHUAee2FKMZDBbFVrbZbPCr3a9KHLZaSn1zY\"]},\"@openzeppelin/contracts/utils/Comparators.sol\":{\"keccak256\":\"0x302eecd8cf323b4690e3494a7d960b3cbce077032ab8ef655b323cdd136cec58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://49ba706f1bc476d68fe6c1fad75517acea4e9e275be0989b548e292eb3a3eacd\",\"dweb:/ipfs/QmeBpvcdGWzWMKTQESUCEhHgnEQYYATVwPxLMxa6vMT7jC\"]},\"@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"@openzeppelin/contracts/utils/SlotDerivation.sol\":{\"keccak256\":\"0x67672e4ca1dafdcc661d4eba8475cfac631fa0933309258e3af7644b92e1fb26\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30192451f05ea5ddb0c18bd0f9003f098505836ba19c08a9c365adf829454da2\",\"dweb:/ipfs/QmfCuZSCTyCdFoSKn7MSaN6hZksnQn9ZhrZDAdRTCbwGu2\"]},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x1225214420c83ebcca88f2ae2b50f053aaa7df7bd684c3e878d334627f2edfc6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c5fab4970634f9ab9a620983dc1c8a30153981a0b1a521666e269d0a11399d3\",\"dweb:/ipfs/QmVRnBC575MESGkEHndjujtR7qub2FzU9RWy9eKLp4hPZB\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/utils/Comparators.sol": {
        "Comparators": {
          "abi": [],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "60808060405234601757603a9081601d823930815050f35b600080fdfe600080fdfea26469706673582212208756b00335f179bcf22653b2d6673d92f6b6ef6e62f5bd914e3ab5374dd874b464736f6c634300081b0033",
              "opcodes": "PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x3A SWAP1 DUP2 PUSH1 0x1D DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH1 0x0 DUP1 REVERT INVALID PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP8 JUMP 0xB0 SUB CALLDATALOAD CALL PUSH26 0xBCF22653B2D6673D92F6B6EF6E62F5BD914E3AB5374DD874B464 PUSH20 0x6F6C634300081B00330000000000000000000000 ",
              "sourceMap": "224:218:21:-:0;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "600080fdfea26469706673582212208756b00335f179bcf22653b2d6673d92f6b6ef6e62f5bd914e3ab5374dd874b464736f6c634300081b0033",
              "opcodes": "PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP8 JUMP 0xB0 SUB CALLDATALOAD CALL PUSH26 0xBCF22653B2D6673D92F6B6EF6E62F5BD914E3AB5374DD874B464 PUSH20 0x6F6C634300081B00330000000000000000000000 ",
              "sourceMap": "224:218:21:-:0;;"
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Provides a set of functions to compare values. _Available since v5.1._\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Comparators.sol\":\"Comparators\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/Comparators.sol\":{\"keccak256\":\"0x302eecd8cf323b4690e3494a7d960b3cbce077032ab8ef655b323cdd136cec58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://49ba706f1bc476d68fe6c1fad75517acea4e9e275be0989b548e292eb3a3eacd\",\"dweb:/ipfs/QmeBpvcdGWzWMKTQESUCEhHgnEQYYATVwPxLMxa6vMT7jC\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/utils/Errors.sol": {
        "Errors": {
          "abi": [
            {
              "inputs": [],
              "name": "FailedCall",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "FailedDeployment",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "balance",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "needed",
                  "type": "uint256"
                }
              ],
              "name": "InsufficientBalance",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "",
                  "type": "address"
                }
              ],
              "name": "MissingPrecompile",
              "type": "error"
            }
          ],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "60808060405234601757603a9081601d823930815050f35b600080fdfe600080fdfea26469706673582212206563c7e9308ca6c3ee5386549883347e477d0c27e5dce2b23d1a78f812104d0564736f6c634300081b0033",
              "opcodes": "PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x3A SWAP1 DUP2 PUSH1 0x1D DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH1 0x0 DUP1 REVERT INVALID PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH6 0x63C7E9308CA6 0xC3 0xEE MSTORE8 DUP7 SLOAD SWAP9 DUP4 CALLVALUE PUSH31 0x477D0C27E5DCE2B23D1A78F812104D0564736F6C634300081B003300000000 ",
              "sourceMap": "411:484:22:-:0;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "600080fdfea26469706673582212206563c7e9308ca6c3ee5386549883347e477d0c27e5dce2b23d1a78f812104d0564736f6c634300081b0033",
              "opcodes": "PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH6 0x63C7E9308CA6 0xC3 0xEE MSTORE8 DUP7 SLOAD SWAP9 DUP4 CALLVALUE PUSH31 0x477D0C27E5DCE2B23D1A78F812104D0564736F6C634300081B003300000000 ",
              "sourceMap": "411:484:22:-:0;;"
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"FailedCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedDeployment\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"MissingPrecompile\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Collection of common custom errors used in multiple contracts IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library. It is recommended to avoid relying on the error API for critical functionality. _Available since v5.1._\",\"errors\":{\"FailedCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"FailedDeployment()\":[{\"details\":\"The deployment failed.\"}],\"InsufficientBalance(uint256,uint256)\":[{\"details\":\"The ETH balance of the account is not enough to perform the operation.\"}],\"MissingPrecompile(address)\":[{\"details\":\"A necessary precompile is missing.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Errors.sol\":\"Errors\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/utils/Panic.sol": {
        "Panic": {
          "abi": [],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "60808060405234601757603a9081601d823930815050f35b600080fdfe600080fdfea26469706673582212207b4b8bb00a1f9e1d9c1a4133dec39ef7bc5a29cd8583596d9b0aee0f06634c4764736f6c634300081b0033",
              "opcodes": "PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x3A SWAP1 DUP2 PUSH1 0x1D DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH1 0x0 DUP1 REVERT INVALID PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH28 0x4B8BB00A1F9E1D9C1A4133DEC39EF7BC5A29CD8583596D9B0AEE0F06 PUSH4 0x4C476473 PUSH16 0x6C634300081B00330000000000000000 ",
              "sourceMap": "657:1315:23:-:0;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "600080fdfea26469706673582212207b4b8bb00a1f9e1d9c1a4133dec39ef7bc5a29cd8583596d9b0aee0f06634c4764736f6c634300081b0033",
              "opcodes": "PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH28 0x4B8BB00A1F9E1D9C1A4133DEC39EF7BC5A29CD8583596D9B0AEE0F06 PUSH4 0x4C476473 PUSH16 0x6C634300081B00330000000000000000 ",
              "sourceMap": "657:1315:23:-:0;;"
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Helper library for emitting standardized panic codes. ```solidity contract Example {      using Panic for uint256;      // Use any of the declared internal constants      function foo() { Panic.GENERIC.panic(); }      // Alternatively      function foo() { Panic.panic(Panic.GENERIC); } } ``` Follows the list from https://github.com/ethereum/solidity/blob/v0.8.24/libsolutil/ErrorCodes.h[libsolutil]. _Available since v5.1._\",\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"ARRAY_OUT_OF_BOUNDS\":{\"details\":\"array out of bounds access\"},\"ASSERT\":{\"details\":\"used by the assert() builtin\"},\"DIVISION_BY_ZERO\":{\"details\":\"division or modulo by zero\"},\"EMPTY_ARRAY_POP\":{\"details\":\"empty array pop\"},\"ENUM_CONVERSION_ERROR\":{\"details\":\"enum conversion error\"},\"GENERIC\":{\"details\":\"generic / unspecified error\"},\"INVALID_INTERNAL_FUNCTION\":{\"details\":\"calling invalid internal function\"},\"RESOURCE_ERROR\":{\"details\":\"resource error (too large allocation or too large array)\"},\"STORAGE_ENCODING_ERROR\":{\"details\":\"invalid encoding in storage\"},\"UNDER_OVERFLOW\":{\"details\":\"arithmetic underflow or overflow\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Panic.sol\":\"Panic\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/utils/SlotDerivation.sol": {
        "SlotDerivation": {
          "abi": [],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "60808060405234601757603a9081601d823930815050f35b600080fdfe600080fdfea26469706673582212208c2a664029f4bfa0565286712a50c52ee4ab68bec4f8ebc8ab03f1cf65e14fa764736f6c634300081b0033",
              "opcodes": "PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x3A SWAP1 DUP2 PUSH1 0x1D DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH1 0x0 DUP1 REVERT INVALID PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP13 0x2A PUSH7 0x4029F4BFA05652 DUP7 PUSH18 0x2A50C52EE4AB68BEC4F8EBC8AB03F1CF65E1 0x4F 0xA7 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ",
              "sourceMap": "1599:3723:24:-:0;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "600080fdfea26469706673582212208c2a664029f4bfa0565286712a50c52ee4ab68bec4f8ebc8ab03f1cf65e14fa764736f6c634300081b0033",
              "opcodes": "PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP13 0x2A PUSH7 0x4029F4BFA05652 DUP7 PUSH18 0x2A50C52EE4AB68BEC4F8EBC8AB03F1CF65E1 0x4F 0xA7 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ",
              "sourceMap": "1599:3723:24:-:0;;"
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Library for computing storage (and transient storage) locations from namespaces and deriving slots corresponding to standard patterns. The derivation method for array and mapping matches the storage layout used by the solidity language / compiler. See https://docs.soliditylang.org/en/v0.8.20/internals/layout_in_storage.html#mappings-and-dynamic-arrays[Solidity docs for mappings and dynamic arrays.]. Example usage: ```solidity contract Example {     // Add the library methods     using StorageSlot for bytes32;     using SlotDerivation for bytes32;     // Declare a namespace     string private constant _NAMESPACE = \\\"<namespace>\\\"; // eg. OpenZeppelin.Slot     function setValueInNamespace(uint256 key, address newValue) internal {         _NAMESPACE.erc7201Slot().deriveMapping(key).getAddressSlot().value = newValue;     }     function getValueInNamespace(uint256 key) internal view returns (address) {         return _NAMESPACE.erc7201Slot().deriveMapping(key).getAddressSlot().value;     } } ``` TIP: Consider using this library along with {StorageSlot}. NOTE: This library provides a way to manipulate storage locations in a non-standard way. Tooling for checking upgrade safety will ignore the slots accessed through this library. _Available since v5.1._\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/SlotDerivation.sol\":\"SlotDerivation\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/SlotDerivation.sol\":{\"keccak256\":\"0x67672e4ca1dafdcc661d4eba8475cfac631fa0933309258e3af7644b92e1fb26\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30192451f05ea5ddb0c18bd0f9003f098505836ba19c08a9c365adf829454da2\",\"dweb:/ipfs/QmfCuZSCTyCdFoSKn7MSaN6hZksnQn9ZhrZDAdRTCbwGu2\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/utils/StorageSlot.sol": {
        "StorageSlot": {
          "abi": [],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "60808060405234601757603a9081601d823930815050f35b600080fdfe600080fdfea26469706673582212200c877124d92838206020fe7302229cf03d4b1963fa754118339197a641c67d9a64736f6c634300081b0033",
              "opcodes": "PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x3A SWAP1 DUP2 PUSH1 0x1D DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH1 0x0 DUP1 REVERT INVALID PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC DUP8 PUSH18 0x24D92838206020FE7302229CF03D4B1963FA PUSH22 0x4118339197A641C67D9A64736F6C634300081B003300 ",
              "sourceMap": "1407:2774:25:-:0;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "600080fdfea26469706673582212200c877124d92838206020fe7302229cf03d4b1963fa754118339197a641c67d9a64736f6c634300081b0033",
              "opcodes": "PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC DUP8 PUSH18 0x24D92838206020FE7302229CF03D4B1963FA PUSH22 0x4118339197A641C67D9A64736F6C634300081B003300 ",
              "sourceMap": "1407:2774:25:-:0;;"
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Library for reading and writing primitive types to specific storage slots. Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts. This library helps with reading and writing to such slots without the need for inline assembly. The functions in this library return Slot structs that contain a `value` member that can be used to read or write. Example usage to set ERC-1967 implementation slot: ```solidity contract ERC1967 {     // Define the slot. Alternatively, use the SlotDerivation library to derive the slot.     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;     function _getImplementation() internal view returns (address) {         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;     }     function _setImplementation(address newImplementation) internal {         require(newImplementation.code.length > 0);         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;     } } ``` TIP: Consider using this library along with {SlotDerivation}.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/StorageSlot.sol\":\"StorageSlot\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/utils/Strings.sol": {
        "Strings": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "length",
                  "type": "uint256"
                }
              ],
              "name": "StringsInsufficientHexLength",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "StringsInvalidAddressFormat",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "StringsInvalidChar",
              "type": "error"
            }
          ],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "60808060405234601757603a9081601d823930815050f35b600080fdfe600080fdfea264697066735822122005673aa6f15470a2159b2ef99c870bd4df7d4bd8672e5446f2543043f282802d64736f6c634300081b0033",
              "opcodes": "PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x3A SWAP1 DUP2 PUSH1 0x1D DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH1 0x0 DUP1 REVERT INVALID PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SDIV PUSH8 0x3AA6F15470A2159B 0x2E 0xF9 SWAP13 DUP8 SIGNEXTEND 0xD4 0xDF PUSH30 0x4BD8672E5446F2543043F282802D64736F6C634300081B00330000000000 ",
              "sourceMap": "297:18982:26:-:0;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "600080fdfea264697066735822122005673aa6f15470a2159b2ef99c870bd4df7d4bd8672e5446f2543043f282802d64736f6c634300081b0033",
              "opcodes": "PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SDIV PUSH8 0x3AA6F15470A2159B 0x2E 0xF9 SWAP13 DUP8 SIGNEXTEND 0xD4 0xDF PUSH30 0x4BD8672E5446F2543043F282802D64736F6C634300081B00330000000000 ",
              "sourceMap": "297:18982:26:-:0;;"
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"StringsInsufficientHexLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StringsInvalidAddressFormat\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StringsInvalidChar\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"String operations.\",\"errors\":{\"StringsInsufficientHexLength(uint256,uint256)\":[{\"details\":\"The `value` string doesn't fit in the specified `length`.\"}],\"StringsInvalidAddressFormat()\":[{\"details\":\"The string being parsed is not a properly formatted address.\"}],\"StringsInvalidChar()\":[{\"details\":\"The string being parsed contains characters that are not in scope of the given base.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Strings.sol\":\"Strings\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0xad148d59f05165f9217d0a9e1ac8f772abb02ea6aaad8a756315c532bf79f9f4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://15e3599867c2182f5831e9268b274b2ef2047825837df6b4d81c9e89254b093e\",\"dweb:/ipfs/QmZbL7XAYr5RmaNaooPgZRmcDXaudfsYQfYD9y5iAECvpS\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x1225214420c83ebcca88f2ae2b50f053aaa7df7bd684c3e878d334627f2edfc6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c5fab4970634f9ab9a620983dc1c8a30153981a0b1a521666e269d0a11399d3\",\"dweb:/ipfs/QmVRnBC575MESGkEHndjujtR7qub2FzU9RWy9eKLp4hPZB\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03\",\"dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/utils/introspection/IERC165.sol": {
        "IERC165": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "bytes4",
                  "name": "interfaceId",
                  "type": "bytes4"
                }
              ],
              "name": "supportsInterface",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "supportsInterface(bytes4)": "01ffc9a7"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC-165 standard, as defined in the https://eips.ethereum.org/EIPS/eip-165[ERC]. Implementers can declare support of contract interfaces, which can then be queried by others ({ERC165Checker}). For an implementation, see {ERC165}.\",\"kind\":\"dev\",\"methods\":{\"supportsInterface(bytes4)\":{\"details\":\"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[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":\"IERC165\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617\",\"dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/utils/math/Math.sol": {
        "Math": {
          "abi": [],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "60808060405234601757603a9081601d823930815050f35b600080fdfe600080fdfea26469706673582212204f5783d820c73db42cae29f343fe21c2520c76c3d136ed329c65542ae0a2d6d864736f6c634300081b0033",
              "opcodes": "PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x3A SWAP1 DUP2 PUSH1 0x1D DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH1 0x0 DUP1 REVERT INVALID PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x4F JUMPI DUP4 0xD8 KECCAK256 0xC7 RETURNDATASIZE 0xB4 0x2C 0xAE 0x29 RETURN NUMBER INVALID 0x21 0xC2 MSTORE 0xC PUSH23 0xC3D136ED329C65542AE0A2D6D864736F6C634300081B00 CALLER ",
              "sourceMap": "281:31863:28:-:0;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "600080fdfea26469706673582212204f5783d820c73db42cae29f343fe21c2520c76c3d136ed329c65542ae0a2d6d864736f6c634300081b0033",
              "opcodes": "PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x4F JUMPI DUP4 0xD8 KECCAK256 0xC7 RETURNDATASIZE 0xB4 0x2C 0xAE 0x29 RETURN NUMBER INVALID 0x21 0xC2 MSTORE 0xC PUSH23 0xC3D136ED329C65542AE0A2D6D864736F6C634300081B00 CALLER ",
              "sourceMap": "281:31863:28:-:0;;"
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Standard math utilities missing in the Solidity language.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/math/Math.sol\":\"Math\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x1225214420c83ebcca88f2ae2b50f053aaa7df7bd684c3e878d334627f2edfc6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c5fab4970634f9ab9a620983dc1c8a30153981a0b1a521666e269d0a11399d3\",\"dweb:/ipfs/QmVRnBC575MESGkEHndjujtR7qub2FzU9RWy9eKLp4hPZB\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/utils/math/SafeCast.sol": {
        "SafeCast": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "uint8",
                  "name": "bits",
                  "type": "uint8"
                },
                {
                  "internalType": "int256",
                  "name": "value",
                  "type": "int256"
                }
              ],
              "name": "SafeCastOverflowedIntDowncast",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "int256",
                  "name": "value",
                  "type": "int256"
                }
              ],
              "name": "SafeCastOverflowedIntToUint",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "uint8",
                  "name": "bits",
                  "type": "uint8"
                },
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "SafeCastOverflowedUintDowncast",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "SafeCastOverflowedUintToInt",
              "type": "error"
            }
          ],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "60808060405234601757603a9081601d823930815050f35b600080fdfe600080fdfea2646970667358221220309fd72e56408bb418e8136ede050df67818feb36adae86e415e897eaf959e7a64736f6c634300081b0033",
              "opcodes": "PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x3A SWAP1 DUP2 PUSH1 0x1D DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH1 0x0 DUP1 REVERT INVALID PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 ADDRESS SWAP16 0xD7 0x2E JUMP BLOCKHASH DUP12 0xB4 XOR 0xE8 SGT PUSH15 0xDE050DF67818FEB36ADAE86E415E89 PUSH31 0xAF959E7A64736F6C634300081B003300000000000000000000000000000000 ",
              "sourceMap": "769:34173:29:-:0;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "600080fdfea2646970667358221220309fd72e56408bb418e8136ede050df67818feb36adae86e415e897eaf959e7a64736f6c634300081b0033",
              "opcodes": "PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 ADDRESS SWAP16 0xD7 0x2E JUMP BLOCKHASH DUP12 0xB4 XOR 0xE8 SGT PUSH15 0xDE050DF67818FEB36ADAE86E415E89 PUSH31 0xAF959E7A64736F6C634300081B003300000000000000000000000000000000 ",
              "sourceMap": "769:34173:29:-:0;;"
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"bits\",\"type\":\"uint8\"},{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"name\":\"SafeCastOverflowedIntDowncast\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"name\":\"SafeCastOverflowedIntToUint\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"bits\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintDowncast\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintToInt\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Wrappers over Solidity's uintXX/intXX/bool casting operators with added overflow checks. Downcasting from uint256/int256 in Solidity does not revert on overflow. This can easily result in undesired exploitation or bugs, since developers usually assume that overflows raise errors. `SafeCast` restores this intuition by reverting the transaction when such an operation overflows. Using this library instead of the unchecked operations eliminates an entire class of bugs, so it's recommended to use it always.\",\"errors\":{\"SafeCastOverflowedIntDowncast(uint8,int256)\":[{\"details\":\"Value doesn't fit in an int of `bits` size.\"}],\"SafeCastOverflowedIntToUint(int256)\":[{\"details\":\"An int value doesn't fit in an uint of `bits` size.\"}],\"SafeCastOverflowedUintDowncast(uint8,uint256)\":[{\"details\":\"Value doesn't fit in an uint of `bits` size.\"}],\"SafeCastOverflowedUintToInt(uint256)\":[{\"details\":\"An uint value doesn't fit in an int of `bits` size.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/math/SafeCast.sol\":\"SafeCast\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]}},\"version\":1}"
        }
      },
      "@openzeppelin/contracts/utils/math/SignedMath.sol": {
        "SignedMath": {
          "abi": [],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "60808060405234601757603a9081601d823930815050f35b600080fdfe600080fdfea2646970667358221220882216d4899c6b949cbd5240512d4c90c2bede7fa7fc3aa3867ed7e6eb7a2cfb64736f6c634300081b0033",
              "opcodes": "PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x3A SWAP1 DUP2 PUSH1 0x1D DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH1 0x0 DUP1 REVERT INVALID PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP9 0x22 AND 0xD4 DUP10 SWAP13 PUSH12 0x949CBD5240512D4C90C2BEDE PUSH32 0xA7FC3AA3867ED7E6EB7A2CFB64736F6C634300081B0033000000000000000000 ",
              "sourceMap": "258:2354:30:-:0;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "600080fdfea2646970667358221220882216d4899c6b949cbd5240512d4c90c2bede7fa7fc3aa3867ed7e6eb7a2cfb64736f6c634300081b0033",
              "opcodes": "PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP9 0x22 AND 0xD4 DUP10 SWAP13 PUSH12 0x949CBD5240512D4C90C2BEDE PUSH32 0xA7FC3AA3867ED7E6EB7A2CFB64736F6C634300081B0033000000000000000000 ",
              "sourceMap": "258:2354:30:-:0;;"
            },
            "methodIdentifiers": {}
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Standard signed math utilities missing in the Solidity language.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/math/SignedMath.sol\":\"SignedMath\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03\",\"dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ\"]}},\"version\":1}"
        }
      },
      "contracts/SoulboundToken.sol": {
        "Soulbound": {
          "abi": [
            {
              "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": "target",
                  "type": "address"
                }
              ],
              "name": "AddressEmptyCode",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "balance",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "needed",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                }
              ],
              "name": "ERC1155InsufficientBalance",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "approver",
                  "type": "address"
                }
              ],
              "name": "ERC1155InvalidApprover",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "idsLength",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "valuesLength",
                  "type": "uint256"
                }
              ],
              "name": "ERC1155InvalidArrayLength",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                }
              ],
              "name": "ERC1155InvalidOperator",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "receiver",
                  "type": "address"
                }
              ],
              "name": "ERC1155InvalidReceiver",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "sender",
                  "type": "address"
                }
              ],
              "name": "ERC1155InvalidSender",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "owner",
                  "type": "address"
                }
              ],
              "name": "ERC1155MissingApprovalForAll",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "implementation",
                  "type": "address"
                }
              ],
              "name": "ERC1967InvalidImplementation",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "ERC1967NonPayable",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "EnforcedPause",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "ExpectedPause",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "FailedCall",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "InvalidInitialization",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "NotInitializing",
              "type": "error"
            },
            {
              "inputs": [],
              "name": "UUPSUnauthorizedCallContext",
              "type": "error"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes32",
                  "name": "slot",
                  "type": "bytes32"
                }
              ],
              "name": "UUPSUnsupportedProxiableUUID",
              "type": "error"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "bool",
                  "name": "approved",
                  "type": "bool"
                }
              ],
              "name": "ApprovalForAll",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "uint64",
                  "name": "version",
                  "type": "uint64"
                }
              ],
              "name": "Initialized",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "Paused",
              "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": "operator",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256[]",
                  "name": "ids",
                  "type": "uint256[]"
                },
                {
                  "indexed": false,
                  "internalType": "uint256[]",
                  "name": "values",
                  "type": "uint256[]"
                }
              ],
              "name": "TransferBatch",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "id",
                  "type": "uint256"
                },
                {
                  "indexed": false,
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "name": "TransferSingle",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "string",
                  "name": "value",
                  "type": "string"
                },
                {
                  "indexed": true,
                  "internalType": "uint256",
                  "name": "id",
                  "type": "uint256"
                }
              ],
              "name": "URI",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "Unpaused",
              "type": "event"
            },
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": true,
                  "internalType": "address",
                  "name": "implementation",
                  "type": "address"
                }
              ],
              "name": "Upgraded",
              "type": "event"
            },
            {
              "inputs": [],
              "name": "DEFAULT_ADMIN_ROLE",
              "outputs": [
                {
                  "internalType": "bytes32",
                  "name": "",
                  "type": "bytes32"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "MINTER_ROLE",
              "outputs": [
                {
                  "internalType": "bytes32",
                  "name": "",
                  "type": "bytes32"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "UPGRADE_INTERFACE_VERSION",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "id",
                  "type": "uint256"
                }
              ],
              "name": "balanceOf",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address[]",
                  "name": "accounts",
                  "type": "address[]"
                },
                {
                  "internalType": "uint256[]",
                  "name": "ids",
                  "type": "uint256[]"
                }
              ],
              "name": "balanceOfBatch",
              "outputs": [
                {
                  "internalType": "uint256[]",
                  "name": "",
                  "type": "uint256[]"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "tokenId",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "amounts",
                  "type": "uint256"
                }
              ],
              "name": "burn",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256[]",
                  "name": "tokenIds",
                  "type": "uint256[]"
                },
                {
                  "internalType": "uint256[]",
                  "name": "amounts",
                  "type": "uint256[]"
                }
              ],
              "name": "burnBatch",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "id",
                  "type": "uint256"
                }
              ],
              "name": "exists",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "getCurrentTokenId",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes32",
                  "name": "role",
                  "type": "bytes32"
                }
              ],
              "name": "getRoleAdmin",
              "outputs": [
                {
                  "internalType": "bytes32",
                  "name": "",
                  "type": "bytes32"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes32",
                  "name": "role",
                  "type": "bytes32"
                },
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "grantRole",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "bytes32",
                  "name": "role",
                  "type": "bytes32"
                },
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                }
              ],
              "name": "hasRole",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "string",
                  "name": "name_",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "symbol_",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "uri_",
                  "type": "string"
                }
              ],
              "name": "initialize",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "account",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                }
              ],
              "name": "isApprovedForAll",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "amounts",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                }
              ],
              "name": "mint",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256[]",
                  "name": "amounts",
                  "type": "uint256[]"
                },
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                }
              ],
              "name": "mintBatch",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "name",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "pause",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "paused",
              "outputs": [
                {
                  "internalType": "bool",
                  "name": "",
                  "type": "bool"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "proxiableUUID",
              "outputs": [
                {
                  "internalType": "bytes32",
                  "name": "",
                  "type": "bytes32"
                }
              ],
              "stateMutability": "view",
              "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": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256[]",
                  "name": "ids",
                  "type": "uint256[]"
                },
                {
                  "internalType": "uint256[]",
                  "name": "values",
                  "type": "uint256[]"
                },
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "name": "safeBatchTransferFrom",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "from",
                  "type": "address"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "id",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "name": "safeTransferFrom",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "operator",
                  "type": "address"
                },
                {
                  "internalType": "bool",
                  "name": "approved",
                  "type": "bool"
                }
              ],
              "name": "setApprovalForAll",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "string",
                  "name": "newuri",
                  "type": "string"
                }
              ],
              "name": "setURI",
              "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": "uint256",
                  "name": "id",
                  "type": "uint256"
                }
              ],
              "name": "totalSupply",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "unpause",
              "outputs": [],
              "stateMutability": "nonpayable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "newImplementation",
                  "type": "address"
                },
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                }
              ],
              "name": "upgradeToAndCall",
              "outputs": [],
              "stateMutability": "payable",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "uint256",
                  "name": "id",
                  "type": "uint256"
                }
              ],
              "name": "uri",
              "outputs": [
                {
                  "internalType": "string",
                  "name": "",
                  "type": "string"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "functionDebugData": {},
              "generatedSources": [],
              "linkReferences": {},
              "object": "60a08060405234602957306080526135f7908161002f8239608051818181610e6b01526110720152f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c8062fdd58e1461022657806301ffc9a71461022157806302fe53051461021c57806306fdde03146102175780630e89341c1461021257806318160ddd1461020d578063248a9ca3146102085780632eb2c2d6146102035780632f2ff15d146101fe57806336568abe146101f95780633f4ba83a146101f45780634e1273f4146101ef5780634f1ef286146101ea5780634f558e79146101e557806352d1902d146101e057806356189236146101db5780635c975abb146101d65780636ac4d939146101d157806383ca4b6f146101cc5780638456cb59146101c757806391d14854146101c257806394bf804d146101bd57806395d89b41146101b8578063a217fddf146101b3578063a22cb465146101ae578063a6487c53146101a9578063ad3cb1cc146101a4578063b390c0ab1461019f578063bd85b0391461019a578063d539139314610195578063d547741f14610190578063e985e9c51461018b5763f242432a1461018657600080fd5b611c69565b611c05565b611ba6565b611b6b565b611b20565b6119c4565b611965565b6116b0565b6115b7565b61159b565b6114f3565b61143a565b6113c7565b6112d2565b61122e565b611122565b6110e0565b6110c2565b611057565b61100a565b610e2c565b610d6b565b610c34565b610bd5565b610b71565b610ae4565b610a1b565b6109de565b6107f3565b610716565b6104f8565b610307565b610270565b600435906001600160a01b038216820361024157565b600080fd5b602435906001600160a01b038216820361024157565b35906001600160a01b038216820361024157565b346102415760406003193601126102415760206102d461028e61022b565b6024356000527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c450083526040600020906001600160a01b0316600052602052604060002090565b54604051908152f35b7fffffffff0000000000000000000000000000000000000000000000000000000081160361024157565b34610241576020600319360112610241577fffffffff00000000000000000000000000000000000000000000000000000000600435610345816102dd565b167f0e08307600000000000000000000000000000000000000000000000000000000811490811561037f575b506040519015158152602090f35b7f7965db0b000000000000000000000000000000000000000000000000000000008114915081156103b2575b5038610371565b7fd9b67a2600000000000000000000000000000000000000000000000000000000811491508115610416575b81156103ec575b50386103ab565b7f01ffc9a700000000000000000000000000000000000000000000000000000000915014386103e5565b7f0e89341c00000000000000000000000000000000000000000000000000000000811491506103de565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f601f19910116810190811067ffffffffffffffff82111761049257604052565b610440565b67ffffffffffffffff811161049257601f01601f191660200190565b81601f82011215610241576020813591016104cd82610497565b926104db604051948561046f565b828452828201116102415781600092602092838601378301015290565b346102415760206003193601126102415760043567ffffffffffffffff81116102415761052c61056e9136906004016104b3565b3360009081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090206105699060ff905b5416611d54565b6123bb565b005b90600182811c921680156105b9575b602083101461058a57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f169161057f565b604051906000827f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c450254916105f683610570565b808352926001811690811561069b575060011461061c575b61061a9250038361046f565b565b507f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c4502600090815290917ff429cb5e2ec84cbb765e76b31964a56ccde03e7a6122d6cc4afb19edc55edeed5b81831061067f57505090602061061a9282010161060e565b6020919350806001915483858901015201910190918492610667565b6020925061061a94915060ff191682840152151560051b82010161060e565b60005b8381106106cd5750506000910152565b81810151838201526020016106bd565b90601f19601f6020936106fb815180928187528780880191016106ba565b0116010190565b9060206107139281815201906106dd565b90565b3461024157600060031936011261024157604051600060015461073881610570565b80845290600181169081156107cf5750600114610770575b61076c836107608185038261046f565b60405191829182610702565b0390f35b600160009081527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6939250905b8082106107b557509091508101602001610760610750565b91926001816020925483858801015201910190929161079d565b60ff191660208086019190915291151560051b840190910191506107609050610750565b346102415760206003193601126102415760043561080f6105c3565b81826000937a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008110156109b3575b50806d04ee2d6d415b85acef8100000000600a921015610997575b662386f26fc10000811015610982575b6305f5e100811015610970575b612710811015610960575b6064811015610951575b1015610946575b6108d660001960216108a060018701612511565b958601015b01917f3031323334353637383961626364656600000000000000000000000000000000600a82061a8353600a900490565b9081156108ea576108d690600019906108a5565b60405161076c906107608161093861090f89610909602085018b611ddf565b90611ddf565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000815260050190565b03601f19810183528261046f565b60019092019161088c565b60029060649004940193610885565b600490612710900494019361087b565b6008906305f5e1009004940193610870565b601090662386f26fc100009004940193610863565b6020906d04ee2d6d415b85acef81000000009004940193610853565b604094507a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000090049050600a610838565b346102415760006003193601126102415760207f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e280154604051908152f35b34610241576020600319360112610241576020610a676004356000527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260016040600020015490565b604051908152f35b67ffffffffffffffff81116104925760051b60200190565b9080601f83011215610241578135610a9e81610a6f565b92610aac604051948561046f565b81845260208085019260051b82010192831161024157602001905b828210610ad45750505090565b8135815260209182019101610ac7565b346102415760a060031936011261024157610afd61022b565b610b05610246565b9060443567ffffffffffffffff811161024157610b26903690600401610a87565b60643567ffffffffffffffff811161024157610b46903690600401610a87565b906084359367ffffffffffffffff851161024157610b6b61056e9536906004016104b3565b93611df6565b346102415760406003193601126102415761056e600435610b90610246565b90610bd0610bcb826000527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260016040600020015490565b612538565b612670565b3461024157604060031936011261024157600435610bf1610246565b336001600160a01b03821603610c0a5761056e91612752565b7f6697b2320000000000000000000000000000000000000000000000000000000060005260046000fd5b34610241576000600319360112610241573360009081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d60205260409020610c7f9060ff90610562565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff811615610cfc5760ff19167fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a1005b7f8dfc202b0000000000000000000000000000000000000000000000000000000060005260046000fd5b906020808351928381520192019060005b818110610d445750505090565b8251845260209384019390920191600101610d37565b906020610713928181520190610d26565b346102415760406003193601126102415760043567ffffffffffffffff8111610241573660238201121561024157806004013590610da882610a6f565b91610db6604051938461046f565b8083526024602084019160051b8301019136831161024157602401905b828210610e14578360243567ffffffffffffffff81116102415761076c91610e02610e08923690600401610a87565b90611eee565b60405191829182610d5a565b60208091610e218461025c565b815201910190610dd3565b604060031936011261024157610e4061022b565b60243567ffffffffffffffff811161024157610e609036906004016104b3565b906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016803014908115610fd5575b50610fab57604051917f52d1902d0000000000000000000000000000000000000000000000000000000083526020836004816001600160a01b0386165afa60009381610f7a575b50610f19577f4c9c8ce3000000000000000000000000000000000000000000000000000000006000526001600160a01b03821660045260246000fd5b907f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8303610f4b5761056e9250612e1c565b7faa1d49a400000000000000000000000000000000000000000000000000000000600052600483905260246000fd5b610f9d91945060203d602011610fa4575b610f95818361046f565b81019061282b565b9238610edd565b503d610f8b565b7fe07c8dba0000000000000000000000000000000000000000000000000000000060005260046000fd5b90506001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416141538610e96565b34610241576020600319360112610241576004356000527f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e280060205260206040600020541515604051908152f35b34610241576000600319360112610241576001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610fab5760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b34610241576000600319360112610241576020600054604051908152f35b3461024157600060031936011261024157602060ff7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330054166040519015158152f35b346102415760406003193601126102415760043567ffffffffffffffff811161024157611153903690600401610a87565b61115b610246565b906111668151611e7a565b3360009081527f549fe2656c81d2947b3b913f0a53b9ea86c71e049f3a1b8aa23c09a8a05cb8d4602052604090206111a39060ff905b5416611fb9565b60005b82518110156111d2576001906111bd60005461204d565b806000556111cb8285611eab565b52016111a6565b5090604051916111e360208461046f565b600083526001600160a01b038416156111ff5761056e9361283a565b7f57f447ce00000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b346102415760406003193601126102415760043567ffffffffffffffff81116102415761125f903690600401610a87565b60243567ffffffffffffffff81116102415761127f903690600401610a87565b9033156112a35761056e916040519161129960208461046f565b6000835233612a2c565b7f01a8351400000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b34610241576000600319360112610241573360009081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d6020526040902061131d9060ff90610562565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff811661139d5760ff1960019116177fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a1005b7fd93c06650000000000000000000000000000000000000000000000000000000060005260046000fd5b3461024157604060031936011261024157602060ff61142e6004356113ea610246565b906000527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680084526040600020906001600160a01b0316600052602052604060002090565b54166040519015158152f35b3461024157604060031936011261024157600435611456610246565b3360009081527f549fe2656c81d2947b3b913f0a53b9ea86c71e049f3a1b8aa23c09a8a05cb8d4602052604090206114909060ff9061119c565b61149b60005461204d565b9081600055604051916114af60208461046f565b600083526001600160a01b038216156111ff5761056e936114ed60405192600184526020840152604083019160018352606084015260808301604052565b9161283a565b3461024157600060031936011261024157604051600060025461151581610570565b80845290600181169081156107cf575060011461153c5761076c836107608185038261046f565b600260009081527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace939250905b80821061158157509091508101602001610760610750565b919260018160209254838588010152019101909291611569565b3461024157600060031936011261024157602060405160008152f35b34610241576040600319360112610241576115d061022b565b602435801515809103610241576001600160a01b038216918215611681576116469061162e336001600160a01b03166000527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c4501602052604060002090565b906001600160a01b0316600052602052604060002090565b60ff1981541660ff83161790556040519081527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3160203392a3005b7fced3e10000000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b346102415760606003193601126102415760043567ffffffffffffffff8111610241576116e19036906004016104b3565b60243567ffffffffffffffff8111610241576117019036906004016104b3565b9060443567ffffffffffffffff8111610241576117229036906004016104b3565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00549267ffffffffffffffff61176860ff604087901c16159567ffffffffffffffff1690565b168015908161195d575b6001149081611953575b15908161194a575b506119205761180592846117fc60017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000007ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005416177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b6118a557612260565b61180b57005b6118767fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a1005b61191b680100000000000000007fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005416177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b612260565b7ff92ee8a90000000000000000000000000000000000000000000000000000000060005260046000fd5b90501538611784565b303b15915061177c565b859150611772565b346102415760006003193601126102415761076c6040805190611988818361046f565b600582527f352e302e300000000000000000000000000000000000000000000000000000006020830152519182916020835260208301906106dd565b346102415760006040600319360112611b1d576024356004353315611af15790611a0b60405192600184526020840152604083019160018352606084015260808301604052565b9160209181604051611a1e60208261046f565b52600192839250611a32858360003361339c565b6000946000935b611a89575b61056e867f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e280154037f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e280155565b8251841015611aec578480968560059796971b90611adb8580848701015193880101516000527f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e2800602052604060002090565b828154039055019501939495611a39565b611a3e565b6024837f01a8351400000000000000000000000000000000000000000000000000000000815280600452fd5b80fd5b34610241576020600319360112610241576004356000527f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e28006020526020604060002054604051908152f35b346102415760006003193601126102415760206040517f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a68152f35b346102415760406003193601126102415761056e600435611bc5610246565b90611c00610bcb826000527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260016040600020015490565b612752565b3461024157604060031936011261024157602060ff61142e611c2561022b565b61162e611c30610246565b916001600160a01b03166000527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c4501602052604060002090565b346102415760a060031936011261024157611c8261022b565b611c8a610246565b604435906064359260843567ffffffffffffffff811161024157611cb29036906004016104b3565b926001600160a01b0382163381141580611d43575b611d12576001600160a01b038416156111ff57156112a35761056e94611d0a60405192600184526020840152604083019160018352606084015260808301604052565b929091612c2f565b7fe237d922000000000000000000000000000000000000000000000000000000006000523360045260245260446000fd5b50611d4e3384612374565b15611cc7565b15611d5b57565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f43616c6c6572206973206e6f7420616e2061646d696e20726f6c65206175746860448201527f6f726973656400000000000000000000000000000000000000000000000000006064820152fd5b90611df2602092828151948592016106ba565b0190565b939291906001600160a01b0385163381141580611e2f575b611d12576001600160a01b038216156111ff57156112a35761061a94612c2f565b5060ff611e723361162e896001600160a01b03166000527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c4501602052604060002090565b541615611e0e565b90611e8482610a6f565b611e91604051918261046f565b828152601f19611ea18294610a6f565b0190602036910137565b8051821015611ebf5760209160051b010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b91909180518351808203611f89575050611f088151611e7a565b9060005b8151811015611f825780611f7060019260051b602080828701015191890101516000527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c45006020526040600020906001600160a01b0316600052602052604060002090565b54611f7b8286611eab565b5201611f0c565b5090925050565b7f5b0599910000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b15611fc057565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f43616c6c6572206973206e6f742061206d696e746572000000000000000000006044820152fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600019811461205c5760010190565b61201e565b601f811161206d575050565b60016000526020600020906020601f840160051c830193106120aa575b601f0160051c01905b81811061209e575050565b60008155600101612093565b909150819061208a565b601f81116120c0575050565b7f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c45026000526020600020906020601f840160051c8301931061211c575b601f0160051c01905b818110612110575050565b60008155600101612105565b90915081906120fc565b601f821161213357505050565b6000526020600020906020601f840160051c8301931061216e575b601f0160051c01905b818110612162575050565b60008155600101612157565b909150819061214e565b90815167ffffffffffffffff8111610492576121a081612199600254610570565b6002612126565b602092601f82116001146121e1576121d1929382916000926121d6575b50506000198260011b9260031b1c19161790565b600255565b0151905038806121bd565b6002600052601f198216937f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace9160005b868110612248575083600195961061222f575b505050811b01600255565b015160001960f88460031b161c19169055388080612224565b91926020600181928685015181550194019201612211565b90916122769061226e612f38565b610569612f38565b61227e612f38565b612287336125be565b5080519067ffffffffffffffff8211610492576122ae826122a9600154610570565b612061565b602090601f83116001146122ea5791806122e29261061a95946000926121d65750506000198260011b9260031b1c19161790565b600155612178565b6001600052601f19831691907fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf69260005b81811061235c575091600193918561061a97969410612343575b505050811b01600155612178565b015160001960f88460031b161c19169055388080612335565b9293602060018192878601518155019501930161231b565b60ff9161162e6123b6926001600160a01b03166000527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c4501602052604060002090565b541690565b90815167ffffffffffffffff811161049257612400816123fb7f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c450254610570565b6120b4565b602092601f821160011461245457612430929382916000926121d65750506000198260011b9260031b1c19161790565b7f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c450255565b7f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c4502600052601f198216937ff429cb5e2ec84cbb765e76b31964a56ccde03e7a6122d6cc4afb19edc55edeed9160005b8681106124f957508360019596106124e0575b505050811b017f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c450255565b015160001960f88460031b161c191690553880806124b6565b919260206001819286850151815501940192016124a3565b9061251b82610497565b612528604051918261046f565b828152601f19611ea18294610497565b806000527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260ff612583336040600020906001600160a01b0316600052602052604060002090565b54161561258d5750565b7fe2517d3f000000000000000000000000000000000000000000000000000000006000523360045260245260446000fd5b6001600160a01b03811660009081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090205460ff1661266a576001600160a01b031660008181527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d60205260408120805460ff191660011790553391907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8180a4600190565b50600090565b806000527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260ff6126bb836040600020906001600160a01b0316600052602052604060002090565b541661274b57806000527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205261270a826040600020906001600160a01b0316600052602052604060002090565b600160ff198254161790556001600160a01b03339216907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d600080a4600190565b5050600090565b806000527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260ff61279d836040600020906001600160a01b0316600052602052604060002090565b54161561274b57806000527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526127ed826040600020906001600160a01b0316600052602052604060002090565b60ff1981541690556001600160a01b03339216907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b600080a4600190565b90816020910312610241575190565b9391909161284b828487600061339c565b600094855b84518710156128bd576128b56001918860051b906128a3602080848a010151938a0101516000527f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e2800602052604060002090565b6128ae8382546132da565b90556132da565b960195612850565b6129159195949296506128f1907f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e2801546132da565b7f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e280155565b6001600160a01b038416158061296c575b15612932575b50505050565b805160010361295b579060208061295295930151910151916000336131d1565b3880808061292c565b61296793600033613024565b612952565b9360009591936000965b85518810156129d5576001908860051b906129c6602080848a010151938a0101516000527f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e2800602052604060002090565b82815403905501970196612976565b612a2791959397509591957f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e280154037f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e280155565b612926565b90919392506001600160a01b0381161590818015612c27575b15612ba35784836000612a579361339c565b612b0f575b6000805b8251821015612abf576001908260051b90612ab0602080848a01015193870101516000527f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e2800602052604060002090565b82815403905501910190612a60565b91505061061a9192507f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e280154037f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e280155565b6000805b8251821015612b6e57612b666001918360051b906128a3602080848b01015193880101516000527f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e2800602052604060002090565b910190612b13565b612b9e91506128f1907f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e2801546132da565b612a5c565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4120536f756c626f756e6420746f6b656e2063616e6e6f74206265207472616e60448201527f73666572726564000000000000000000000000000000000000000000000000006064820152fd5b506001612a45565b919392906001600160a01b03831615808015612e0b575b15612ba357612c578387848761339c565b612d6f575b6001600160a01b0381161580612cb1575b15612c7a575b5050505050565b8451600103612ca057602080612c9696015192015192336131d1565b3880808080612c73565b612cac94919233613024565b612c96565b94936000939091845b8651861015612d19576001908660051b90612d0a602080848a010151938b0101516000527f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e2800602052604060002090565b82815403905501950194612cba565b612d6a919396979295507f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e280154037f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e280155565b612c6d565b9392600092835b8551851015612dd157612dc96001918660051b906128a3602080848a010151938b0101516000527f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e2800602052604060002090565b940193612d76565b612e069194506128f190969295967f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e2801546132da565b612c5c565b506001600160a01b03821615612c46565b90813b15612f01576001600160a01b038216807fffffffffffffffffffffffff00000000000000000000000000000000000000007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416177f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2805115612ece57612ecb916132bc565b50565b505034612ed757565b7fb398979f0000000000000000000000000000000000000000000000000000000060005260046000fd5b6001600160a01b03827f4c9c8ce3000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c1615612f6757565b7fd7e6bcf80000000000000000000000000000000000000000000000000000000060005260046000fd5b908160209103126102415751610713816102dd565b939061071395936001600160a01b03612fe69481612fd89416885216602087015260a0604087015260a0860190610d26565b908482036060860152610d26565b9160808184039101526106dd565b3d1561301f573d9061300582610497565b91613013604051938461046f565b82523d6000602084013e565b606090565b9091949293853b613038575b505050505050565b6020936130739160405196879586957fbc197c8100000000000000000000000000000000000000000000000000000000875260048701612fa6565b038160006001600160a01b0387165af16000918161316c575b506130e1575061309a612ff4565b80519190826130da577f57f447ce000000000000000000000000000000000000000000000000000000006000526001600160a01b03821660045260246000fd5b6020915001fd5b7fffffffff000000000000000000000000000000000000000000000000000000007fbc197c81000000000000000000000000000000000000000000000000000000009116036131365750388080808080613030565b7f57f447ce000000000000000000000000000000000000000000000000000000006000526001600160a01b031660045260246000fd5b61318f91925060203d602011613196575b613187818361046f565b810190612f91565b903861308c565b503d61317d565b91926001600160a01b0360a094816107139897941685521660208401526040830152606082015281608082015201906106dd565b9091949293853b6131e457505050505050565b60209361321f9160405196879586957ff23a6e610000000000000000000000000000000000000000000000000000000087526004870161319d565b038160006001600160a01b0387165af16000918161329b575b50613246575061309a612ff4565b7fffffffff000000000000000000000000000000000000000000000000000000007ff23a6e61000000000000000000000000000000000000000000000000000000009116036131365750388080808080613030565b6132b591925060203d60201161319657613187818361046f565b9038613238565b60008061071393602081519101845af46132d4612ff4565b916132e7565b9190820180921161205c57565b9061332657508051156132fc57602081519101fd5b7fd6bda2750000000000000000000000000000000000000000000000000000000060005260046000fd5b8151158061336e575b613337575090565b6001600160a01b03907f9996b315000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b50803b1561332f565b909161338e61071393604084526040840190610d26565b916020818403910152610d26565b9392918051835190818103611f8957505060005b815181101561351c578060051b9060208083850101519286010151846001600160a01b038916613442575b6001936001600160a01b0382166133f6575b505050016133b0565b6134389161162e613430926000527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c4500602052604060002090565b9182546132da565b90553884816133ed565b50909161347c8861162e836000527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c4500602052604060002090565b548281106134cc578291600194938792036134c48b61162e846000527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c4500602052604060002090565b5593506133db565b6040517f03dee4c50000000000000000000000000000000000000000000000000000000081526001600160a01b038a16600482015260248101919091526044810183905260648101829052608490fd5b50805193949391929160010361357f576020908101519181015160408051938452918301526001600160a01b03928316939092169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6291819081015b0390a4565b90916001600160a01b037f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb9161357a826040519384931697169533958361337756fea2646970667358221220f7addbc7d31946dddc83935807e49a26c237e7f18fdf8800dc17caa91da5606e64736f6c634300081b0033",
              "opcodes": "PUSH1 0xA0 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x29 JUMPI ADDRESS PUSH1 0x80 MSTORE PUSH2 0x35F7 SWAP1 DUP2 PUSH2 0x2F DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 DUP2 DUP2 PUSH2 0xE6B ADD MSTORE PUSH2 0x1072 ADD MSTORE RETURN JUMPDEST PUSH1 0x0 DUP1 REVERT INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH3 0xFDD58E EQ PUSH2 0x226 JUMPI DUP1 PUSH4 0x1FFC9A7 EQ PUSH2 0x221 JUMPI DUP1 PUSH4 0x2FE5305 EQ PUSH2 0x21C JUMPI DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x217 JUMPI DUP1 PUSH4 0xE89341C EQ PUSH2 0x212 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x20D JUMPI DUP1 PUSH4 0x248A9CA3 EQ PUSH2 0x208 JUMPI DUP1 PUSH4 0x2EB2C2D6 EQ PUSH2 0x203 JUMPI DUP1 PUSH4 0x2F2FF15D EQ PUSH2 0x1FE JUMPI DUP1 PUSH4 0x36568ABE EQ PUSH2 0x1F9 JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x1F4 JUMPI DUP1 PUSH4 0x4E1273F4 EQ PUSH2 0x1EF JUMPI DUP1 PUSH4 0x4F1EF286 EQ PUSH2 0x1EA JUMPI DUP1 PUSH4 0x4F558E79 EQ PUSH2 0x1E5 JUMPI DUP1 PUSH4 0x52D1902D EQ PUSH2 0x1E0 JUMPI DUP1 PUSH4 0x56189236 EQ PUSH2 0x1DB JUMPI DUP1 PUSH4 0x5C975ABB EQ PUSH2 0x1D6 JUMPI DUP1 PUSH4 0x6AC4D939 EQ PUSH2 0x1D1 JUMPI DUP1 PUSH4 0x83CA4B6F EQ PUSH2 0x1CC JUMPI DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x1C7 JUMPI DUP1 PUSH4 0x91D14854 EQ PUSH2 0x1C2 JUMPI DUP1 PUSH4 0x94BF804D EQ PUSH2 0x1BD JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x1B8 JUMPI DUP1 PUSH4 0xA217FDDF EQ PUSH2 0x1B3 JUMPI DUP1 PUSH4 0xA22CB465 EQ PUSH2 0x1AE JUMPI DUP1 PUSH4 0xA6487C53 EQ PUSH2 0x1A9 JUMPI DUP1 PUSH4 0xAD3CB1CC EQ PUSH2 0x1A4 JUMPI DUP1 PUSH4 0xB390C0AB EQ PUSH2 0x19F JUMPI DUP1 PUSH4 0xBD85B039 EQ PUSH2 0x19A JUMPI DUP1 PUSH4 0xD5391393 EQ PUSH2 0x195 JUMPI DUP1 PUSH4 0xD547741F EQ PUSH2 0x190 JUMPI DUP1 PUSH4 0xE985E9C5 EQ PUSH2 0x18B JUMPI PUSH4 0xF242432A EQ PUSH2 0x186 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1C69 JUMP JUMPDEST PUSH2 0x1C05 JUMP JUMPDEST PUSH2 0x1BA6 JUMP JUMPDEST PUSH2 0x1B6B JUMP JUMPDEST PUSH2 0x1B20 JUMP JUMPDEST PUSH2 0x19C4 JUMP JUMPDEST PUSH2 0x1965 JUMP JUMPDEST PUSH2 0x16B0 JUMP JUMPDEST PUSH2 0x15B7 JUMP JUMPDEST PUSH2 0x159B JUMP JUMPDEST PUSH2 0x14F3 JUMP JUMPDEST PUSH2 0x143A JUMP JUMPDEST PUSH2 0x13C7 JUMP JUMPDEST PUSH2 0x12D2 JUMP JUMPDEST PUSH2 0x122E JUMP JUMPDEST PUSH2 0x1122 JUMP JUMPDEST PUSH2 0x10E0 JUMP JUMPDEST PUSH2 0x10C2 JUMP JUMPDEST PUSH2 0x1057 JUMP JUMPDEST PUSH2 0x100A JUMP JUMPDEST PUSH2 0xE2C JUMP JUMPDEST PUSH2 0xD6B JUMP JUMPDEST PUSH2 0xC34 JUMP JUMPDEST PUSH2 0xBD5 JUMP JUMPDEST PUSH2 0xB71 JUMP JUMPDEST PUSH2 0xAE4 JUMP JUMPDEST PUSH2 0xA1B JUMP JUMPDEST PUSH2 0x9DE JUMP JUMPDEST PUSH2 0x7F3 JUMP JUMPDEST PUSH2 0x716 JUMP JUMPDEST PUSH2 0x4F8 JUMP JUMPDEST PUSH2 0x307 JUMP JUMPDEST PUSH2 0x270 JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x241 JUMPI JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x241 JUMPI JUMP JUMPDEST CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x241 JUMPI JUMP JUMPDEST CALLVALUE PUSH2 0x241 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI PUSH1 0x20 PUSH2 0x2D4 PUSH2 0x28E PUSH2 0x22B JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH1 0x0 MSTORE PUSH32 0x88BE536D5240C274A3B1D3A1BE54482FD9CAA294F08C62A7CDE569F49A3C4500 DUP4 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND SUB PUSH2 0x241 JUMPI JUMP JUMPDEST CALLVALUE PUSH2 0x241 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x4 CALLDATALOAD PUSH2 0x345 DUP2 PUSH2 0x2DD JUMP JUMPDEST AND PUSH32 0xE08307600000000000000000000000000000000000000000000000000000000 DUP2 EQ SWAP1 DUP2 ISZERO PUSH2 0x37F JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 SWAP1 RETURN JUMPDEST PUSH32 0x7965DB0B00000000000000000000000000000000000000000000000000000000 DUP2 EQ SWAP2 POP DUP2 ISZERO PUSH2 0x3B2 JUMPI JUMPDEST POP CODESIZE PUSH2 0x371 JUMP JUMPDEST PUSH32 0xD9B67A2600000000000000000000000000000000000000000000000000000000 DUP2 EQ SWAP2 POP DUP2 ISZERO PUSH2 0x416 JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x3EC JUMPI JUMPDEST POP CODESIZE PUSH2 0x3AB JUMP JUMPDEST PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 SWAP2 POP EQ CODESIZE PUSH2 0x3E5 JUMP JUMPDEST PUSH32 0xE89341C00000000000000000000000000000000000000000000000000000000 DUP2 EQ SWAP2 POP PUSH2 0x3DE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x492 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH2 0x440 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x492 JUMPI PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x241 JUMPI PUSH1 0x20 DUP2 CALLDATALOAD SWAP2 ADD PUSH2 0x4CD DUP3 PUSH2 0x497 JUMP JUMPDEST SWAP3 PUSH2 0x4DB PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x46F JUMP JUMPDEST DUP3 DUP5 MSTORE DUP3 DUP3 ADD GT PUSH2 0x241 JUMPI DUP2 PUSH1 0x0 SWAP3 PUSH1 0x20 SWAP3 DUP4 DUP7 ADD CALLDATACOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST CALLVALUE PUSH2 0x241 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x241 JUMPI PUSH2 0x52C PUSH2 0x56E SWAP2 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x4B3 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0xB7DB2DD08FCB62D0C9E08C51941CAE53C267786A0B75803FB7960902FC8EF97D PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x569 SWAP1 PUSH1 0xFF SWAP1 JUMPDEST SLOAD AND PUSH2 0x1D54 JUMP JUMPDEST PUSH2 0x23BB JUMP JUMPDEST STOP JUMPDEST SWAP1 PUSH1 0x1 DUP3 DUP2 SHR SWAP3 AND DUP1 ISZERO PUSH2 0x5B9 JUMPI JUMPDEST PUSH1 0x20 DUP4 LT EQ PUSH2 0x58A JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP2 PUSH1 0x7F AND SWAP2 PUSH2 0x57F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH1 0x0 DUP3 PUSH32 0x88BE536D5240C274A3B1D3A1BE54482FD9CAA294F08C62A7CDE569F49A3C4502 SLOAD SWAP2 PUSH2 0x5F6 DUP4 PUSH2 0x570 JUMP JUMPDEST DUP1 DUP4 MSTORE SWAP3 PUSH1 0x1 DUP2 AND SWAP1 DUP2 ISZERO PUSH2 0x69B JUMPI POP PUSH1 0x1 EQ PUSH2 0x61C JUMPI JUMPDEST PUSH2 0x61A SWAP3 POP SUB DUP4 PUSH2 0x46F JUMP JUMPDEST JUMP JUMPDEST POP PUSH32 0x88BE536D5240C274A3B1D3A1BE54482FD9CAA294F08C62A7CDE569F49A3C4502 PUSH1 0x0 SWAP1 DUP2 MSTORE SWAP1 SWAP2 PUSH32 0xF429CB5E2EC84CBB765E76B31964A56CCDE03E7A6122D6CC4AFB19EDC55EDEED JUMPDEST DUP2 DUP4 LT PUSH2 0x67F JUMPI POP POP SWAP1 PUSH1 0x20 PUSH2 0x61A SWAP3 DUP3 ADD ADD PUSH2 0x60E JUMP JUMPDEST PUSH1 0x20 SWAP2 SWAP4 POP DUP1 PUSH1 0x1 SWAP2 SLOAD DUP4 DUP6 DUP10 ADD ADD MSTORE ADD SWAP2 ADD SWAP1 SWAP2 DUP5 SWAP3 PUSH2 0x667 JUMP JUMPDEST PUSH1 0x20 SWAP3 POP PUSH2 0x61A SWAP5 SWAP2 POP PUSH1 0xFF NOT AND DUP3 DUP5 ADD MSTORE ISZERO ISZERO PUSH1 0x5 SHL DUP3 ADD ADD PUSH2 0x60E JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT PUSH2 0x6CD JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x6BD JUMP JUMPDEST SWAP1 PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 SWAP4 PUSH2 0x6FB DUP2 MLOAD DUP1 SWAP3 DUP2 DUP8 MSTORE DUP8 DUP1 DUP9 ADD SWAP2 ADD PUSH2 0x6BA JUMP JUMPDEST ADD AND ADD ADD SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x20 PUSH2 0x713 SWAP3 DUP2 DUP2 MSTORE ADD SWAP1 PUSH2 0x6DD JUMP JUMPDEST SWAP1 JUMP JUMPDEST CALLVALUE PUSH2 0x241 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI PUSH1 0x40 MLOAD PUSH1 0x0 PUSH1 0x1 SLOAD PUSH2 0x738 DUP2 PUSH2 0x570 JUMP JUMPDEST DUP1 DUP5 MSTORE SWAP1 PUSH1 0x1 DUP2 AND SWAP1 DUP2 ISZERO PUSH2 0x7CF JUMPI POP PUSH1 0x1 EQ PUSH2 0x770 JUMPI JUMPDEST PUSH2 0x76C DUP4 PUSH2 0x760 DUP2 DUP6 SUB DUP3 PUSH2 0x46F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0x702 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST PUSH1 0x1 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0xB10E2D527612073B26EECDFD717E6A320CF44B4AFAC2B0732D9FCBE2B7FA0CF6 SWAP4 SWAP3 POP SWAP1 JUMPDEST DUP1 DUP3 LT PUSH2 0x7B5 JUMPI POP SWAP1 SWAP2 POP DUP2 ADD PUSH1 0x20 ADD PUSH2 0x760 PUSH2 0x750 JUMP JUMPDEST SWAP2 SWAP3 PUSH1 0x1 DUP2 PUSH1 0x20 SWAP3 SLOAD DUP4 DUP6 DUP9 ADD ADD MSTORE ADD SWAP2 ADD SWAP1 SWAP3 SWAP2 PUSH2 0x79D JUMP JUMPDEST PUSH1 0xFF NOT AND PUSH1 0x20 DUP1 DUP7 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 ISZERO ISZERO PUSH1 0x5 SHL DUP5 ADD SWAP1 SWAP2 ADD SWAP2 POP PUSH2 0x760 SWAP1 POP PUSH2 0x750 JUMP JUMPDEST CALLVALUE PUSH2 0x241 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x80F PUSH2 0x5C3 JUMP JUMPDEST DUP2 DUP3 PUSH1 0x0 SWAP4 PUSH27 0x184F03E93FF9F4DAA797ED6E38ED64BF6A1F010000000000000000 DUP2 LT ISZERO PUSH2 0x9B3 JUMPI JUMPDEST POP DUP1 PUSH14 0x4EE2D6D415B85ACEF8100000000 PUSH1 0xA SWAP3 LT ISZERO PUSH2 0x997 JUMPI JUMPDEST PUSH7 0x2386F26FC10000 DUP2 LT ISZERO PUSH2 0x982 JUMPI JUMPDEST PUSH4 0x5F5E100 DUP2 LT ISZERO PUSH2 0x970 JUMPI JUMPDEST PUSH2 0x2710 DUP2 LT ISZERO PUSH2 0x960 JUMPI JUMPDEST PUSH1 0x64 DUP2 LT ISZERO PUSH2 0x951 JUMPI JUMPDEST LT ISZERO PUSH2 0x946 JUMPI JUMPDEST PUSH2 0x8D6 PUSH1 0x0 NOT PUSH1 0x21 PUSH2 0x8A0 PUSH1 0x1 DUP8 ADD PUSH2 0x2511 JUMP JUMPDEST SWAP6 DUP7 ADD ADD JUMPDEST ADD SWAP2 PUSH32 0x3031323334353637383961626364656600000000000000000000000000000000 PUSH1 0xA DUP3 MOD BYTE DUP4 MSTORE8 PUSH1 0xA SWAP1 DIV SWAP1 JUMP JUMPDEST SWAP1 DUP2 ISZERO PUSH2 0x8EA JUMPI PUSH2 0x8D6 SWAP1 PUSH1 0x0 NOT SWAP1 PUSH2 0x8A5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x76C SWAP1 PUSH2 0x760 DUP2 PUSH2 0x938 PUSH2 0x90F DUP10 PUSH2 0x909 PUSH1 0x20 DUP6 ADD DUP12 PUSH2 0x1DDF JUMP JUMPDEST SWAP1 PUSH2 0x1DDF JUMP JUMPDEST PUSH32 0x2E6A736F6E000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x5 ADD SWAP1 JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP4 MSTORE DUP3 PUSH2 0x46F JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 PUSH2 0x88C JUMP JUMPDEST PUSH1 0x2 SWAP1 PUSH1 0x64 SWAP1 DIV SWAP5 ADD SWAP4 PUSH2 0x885 JUMP JUMPDEST PUSH1 0x4 SWAP1 PUSH2 0x2710 SWAP1 DIV SWAP5 ADD SWAP4 PUSH2 0x87B JUMP JUMPDEST PUSH1 0x8 SWAP1 PUSH4 0x5F5E100 SWAP1 DIV SWAP5 ADD SWAP4 PUSH2 0x870 JUMP JUMPDEST PUSH1 0x10 SWAP1 PUSH7 0x2386F26FC10000 SWAP1 DIV SWAP5 ADD SWAP4 PUSH2 0x863 JUMP JUMPDEST PUSH1 0x20 SWAP1 PUSH14 0x4EE2D6D415B85ACEF8100000000 SWAP1 DIV SWAP5 ADD SWAP4 PUSH2 0x853 JUMP JUMPDEST PUSH1 0x40 SWAP5 POP PUSH27 0x184F03E93FF9F4DAA797ED6E38ED64BF6A1F010000000000000000 SWAP1 DIV SWAP1 POP PUSH1 0xA PUSH2 0x838 JUMP JUMPDEST CALLVALUE PUSH2 0x241 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI PUSH1 0x20 PUSH32 0x4A593662EE04D27B6A00EBB31BE7FE0C102C2ADE82A7C5D764F2DF05DC4E2801 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x241 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI PUSH1 0x20 PUSH2 0xA67 PUSH1 0x4 CALLDATALOAD PUSH1 0x0 MSTORE PUSH32 0x2DD7BC7DEC4DCEEDDA775E58DD541E08A116C6C53815C0BD028192F7B626800 PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x40 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x492 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x241 JUMPI DUP2 CALLDATALOAD PUSH2 0xA9E DUP2 PUSH2 0xA6F JUMP JUMPDEST SWAP3 PUSH2 0xAAC PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x46F JUMP JUMPDEST DUP2 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x241 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0xAD4 JUMPI POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD DUP2 MSTORE PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xAC7 JUMP JUMPDEST CALLVALUE PUSH2 0x241 JUMPI PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI PUSH2 0xAFD PUSH2 0x22B JUMP JUMPDEST PUSH2 0xB05 PUSH2 0x246 JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x241 JUMPI PUSH2 0xB26 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xA87 JUMP JUMPDEST PUSH1 0x64 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x241 JUMPI PUSH2 0xB46 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xA87 JUMP JUMPDEST SWAP1 PUSH1 0x84 CALLDATALOAD SWAP4 PUSH8 0xFFFFFFFFFFFFFFFF DUP6 GT PUSH2 0x241 JUMPI PUSH2 0xB6B PUSH2 0x56E SWAP6 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x4B3 JUMP JUMPDEST SWAP4 PUSH2 0x1DF6 JUMP JUMPDEST CALLVALUE PUSH2 0x241 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI PUSH2 0x56E PUSH1 0x4 CALLDATALOAD PUSH2 0xB90 PUSH2 0x246 JUMP JUMPDEST SWAP1 PUSH2 0xBD0 PUSH2 0xBCB DUP3 PUSH1 0x0 MSTORE PUSH32 0x2DD7BC7DEC4DCEEDDA775E58DD541E08A116C6C53815C0BD028192F7B626800 PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x40 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x2538 JUMP JUMPDEST PUSH2 0x2670 JUMP JUMPDEST CALLVALUE PUSH2 0x241 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0xBF1 PUSH2 0x246 JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SUB PUSH2 0xC0A JUMPI PUSH2 0x56E SWAP2 PUSH2 0x2752 JUMP JUMPDEST PUSH32 0x6697B23200000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x0 REVERT JUMPDEST CALLVALUE PUSH2 0x241 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0xB7DB2DD08FCB62D0C9E08C51941CAE53C267786A0B75803FB7960902FC8EF97D PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0xC7F SWAP1 PUSH1 0xFF SWAP1 PUSH2 0x562 JUMP JUMPDEST PUSH32 0xCD5ED15C6E187E77E9AEE88184C21F4F2182AB5827CB3B7E07FBEDCD63F03300 SLOAD PUSH1 0xFF DUP2 AND ISZERO PUSH2 0xCFC JUMPI PUSH1 0xFF NOT AND PUSH32 0xCD5ED15C6E187E77E9AEE88184C21F4F2182AB5827CB3B7E07FBEDCD63F03300 SSTORE PUSH32 0x5DB9EE0A495BF2E6FF9C91A7834C1BA4FDD244A5E8AA4E537BD38AEAE4B073AA PUSH1 0x20 PUSH1 0x40 MLOAD CALLER DUP2 MSTORE LOG1 STOP JUMPDEST PUSH32 0x8DFC202B00000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x0 REVERT JUMPDEST SWAP1 PUSH1 0x20 DUP1 DUP4 MLOAD SWAP3 DUP4 DUP2 MSTORE ADD SWAP3 ADD SWAP1 PUSH1 0x0 JUMPDEST DUP2 DUP2 LT PUSH2 0xD44 JUMPI POP POP POP SWAP1 JUMP JUMPDEST DUP3 MLOAD DUP5 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0xD37 JUMP JUMPDEST SWAP1 PUSH1 0x20 PUSH2 0x713 SWAP3 DUP2 DUP2 MSTORE ADD SWAP1 PUSH2 0xD26 JUMP JUMPDEST CALLVALUE PUSH2 0x241 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x241 JUMPI CALLDATASIZE PUSH1 0x23 DUP3 ADD SLT ISZERO PUSH2 0x241 JUMPI DUP1 PUSH1 0x4 ADD CALLDATALOAD SWAP1 PUSH2 0xDA8 DUP3 PUSH2 0xA6F JUMP JUMPDEST SWAP2 PUSH2 0xDB6 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x46F JUMP JUMPDEST DUP1 DUP4 MSTORE PUSH1 0x24 PUSH1 0x20 DUP5 ADD SWAP2 PUSH1 0x5 SHL DUP4 ADD ADD SWAP2 CALLDATASIZE DUP4 GT PUSH2 0x241 JUMPI PUSH1 0x24 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0xE14 JUMPI DUP4 PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x241 JUMPI PUSH2 0x76C SWAP2 PUSH2 0xE02 PUSH2 0xE08 SWAP3 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xA87 JUMP JUMPDEST SWAP1 PUSH2 0x1EEE JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0xD5A JUMP JUMPDEST PUSH1 0x20 DUP1 SWAP2 PUSH2 0xE21 DUP5 PUSH2 0x25C JUMP JUMPDEST DUP2 MSTORE ADD SWAP2 ADD SWAP1 PUSH2 0xDD3 JUMP JUMPDEST PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI PUSH2 0xE40 PUSH2 0x22B JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x241 JUMPI PUSH2 0xE60 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x4B3 JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP1 ADDRESS EQ SWAP1 DUP2 ISZERO PUSH2 0xFD5 JUMPI JUMPDEST POP PUSH2 0xFAB JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH32 0x52D1902D00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x20 DUP4 PUSH1 0x4 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND GAS STATICCALL PUSH1 0x0 SWAP4 DUP2 PUSH2 0xF7A JUMPI JUMPDEST POP PUSH2 0xF19 JUMPI PUSH32 0x4C9C8CE300000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP1 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC DUP4 SUB PUSH2 0xF4B JUMPI PUSH2 0x56E SWAP3 POP PUSH2 0x2E1C JUMP JUMPDEST PUSH32 0xAA1D49A400000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x4 DUP4 SWAP1 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0xF9D SWAP2 SWAP5 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xFA4 JUMPI JUMPDEST PUSH2 0xF95 DUP2 DUP4 PUSH2 0x46F JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x282B JUMP JUMPDEST SWAP3 CODESIZE PUSH2 0xEDD JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xF8B JUMP JUMPDEST PUSH32 0xE07C8DBA00000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x0 REVERT JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD AND EQ ISZERO CODESIZE PUSH2 0xE96 JUMP JUMPDEST CALLVALUE PUSH2 0x241 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI PUSH1 0x4 CALLDATALOAD PUSH1 0x0 MSTORE PUSH32 0x4A593662EE04D27B6A00EBB31BE7FE0C102C2ADE82A7C5D764F2DF05DC4E2800 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH1 0x0 KECCAK256 SLOAD ISZERO ISZERO PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x241 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND ADDRESS SUB PUSH2 0xFAB JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x241 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI PUSH1 0x20 PUSH1 0x0 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x241 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI PUSH1 0x20 PUSH1 0xFF PUSH32 0xCD5ED15C6E187E77E9AEE88184C21F4F2182AB5827CB3B7E07FBEDCD63F03300 SLOAD AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x241 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x241 JUMPI PUSH2 0x1153 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xA87 JUMP JUMPDEST PUSH2 0x115B PUSH2 0x246 JUMP JUMPDEST SWAP1 PUSH2 0x1166 DUP2 MLOAD PUSH2 0x1E7A JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0x549FE2656C81D2947B3B913F0A53B9EA86C71E049F3A1B8AA23C09A8A05CB8D4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x11A3 SWAP1 PUSH1 0xFF SWAP1 JUMPDEST SLOAD AND PUSH2 0x1FB9 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x11D2 JUMPI PUSH1 0x1 SWAP1 PUSH2 0x11BD PUSH1 0x0 SLOAD PUSH2 0x204D JUMP JUMPDEST DUP1 PUSH1 0x0 SSTORE PUSH2 0x11CB DUP3 DUP6 PUSH2 0x1EAB JUMP JUMPDEST MSTORE ADD PUSH2 0x11A6 JUMP JUMPDEST POP SWAP1 PUSH1 0x40 MLOAD SWAP2 PUSH2 0x11E3 PUSH1 0x20 DUP5 PUSH2 0x46F JUMP JUMPDEST PUSH1 0x0 DUP4 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND ISZERO PUSH2 0x11FF JUMPI PUSH2 0x56E SWAP4 PUSH2 0x283A JUMP JUMPDEST PUSH32 0x57F447CE00000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST CALLVALUE PUSH2 0x241 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x241 JUMPI PUSH2 0x125F SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xA87 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x241 JUMPI PUSH2 0x127F SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xA87 JUMP JUMPDEST SWAP1 CALLER ISZERO PUSH2 0x12A3 JUMPI PUSH2 0x56E SWAP2 PUSH1 0x40 MLOAD SWAP2 PUSH2 0x1299 PUSH1 0x20 DUP5 PUSH2 0x46F JUMP JUMPDEST PUSH1 0x0 DUP4 MSTORE CALLER PUSH2 0x2A2C JUMP JUMPDEST PUSH32 0x1A8351400000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST CALLVALUE PUSH2 0x241 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0xB7DB2DD08FCB62D0C9E08C51941CAE53C267786A0B75803FB7960902FC8EF97D PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x131D SWAP1 PUSH1 0xFF SWAP1 PUSH2 0x562 JUMP JUMPDEST PUSH32 0xCD5ED15C6E187E77E9AEE88184C21F4F2182AB5827CB3B7E07FBEDCD63F03300 SLOAD PUSH1 0xFF DUP2 AND PUSH2 0x139D JUMPI PUSH1 0xFF NOT PUSH1 0x1 SWAP2 AND OR PUSH32 0xCD5ED15C6E187E77E9AEE88184C21F4F2182AB5827CB3B7E07FBEDCD63F03300 SSTORE PUSH32 0x62E78CEA01BEE320CD4E420270B5EA74000D11B0C9F74754EBDBFC544B05A258 PUSH1 0x20 PUSH1 0x40 MLOAD CALLER DUP2 MSTORE LOG1 STOP JUMPDEST PUSH32 0xD93C066500000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x0 REVERT JUMPDEST CALLVALUE PUSH2 0x241 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI PUSH1 0x20 PUSH1 0xFF PUSH2 0x142E PUSH1 0x4 CALLDATALOAD PUSH2 0x13EA PUSH2 0x246 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH32 0x2DD7BC7DEC4DCEEDDA775E58DD541E08A116C6C53815C0BD028192F7B626800 DUP5 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x241 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x1456 PUSH2 0x246 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0x549FE2656C81D2947B3B913F0A53B9EA86C71E049F3A1B8AA23C09A8A05CB8D4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x1490 SWAP1 PUSH1 0xFF SWAP1 PUSH2 0x119C JUMP JUMPDEST PUSH2 0x149B PUSH1 0x0 SLOAD PUSH2 0x204D JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x0 SSTORE PUSH1 0x40 MLOAD SWAP2 PUSH2 0x14AF PUSH1 0x20 DUP5 PUSH2 0x46F JUMP JUMPDEST PUSH1 0x0 DUP4 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ISZERO PUSH2 0x11FF JUMPI PUSH2 0x56E SWAP4 PUSH2 0x14ED PUSH1 0x40 MLOAD SWAP3 PUSH1 0x1 DUP5 MSTORE PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD SWAP2 PUSH1 0x1 DUP4 MSTORE PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP2 PUSH2 0x283A JUMP JUMPDEST CALLVALUE PUSH2 0x241 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI PUSH1 0x40 MLOAD PUSH1 0x0 PUSH1 0x2 SLOAD PUSH2 0x1515 DUP2 PUSH2 0x570 JUMP JUMPDEST DUP1 DUP5 MSTORE SWAP1 PUSH1 0x1 DUP2 AND SWAP1 DUP2 ISZERO PUSH2 0x7CF JUMPI POP PUSH1 0x1 EQ PUSH2 0x153C JUMPI PUSH2 0x76C DUP4 PUSH2 0x760 DUP2 DUP6 SUB DUP3 PUSH2 0x46F JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0x405787FA12A823E0F2B7631CC41B3BA8828B3321CA811111FA75CD3AA3BB5ACE SWAP4 SWAP3 POP SWAP1 JUMPDEST DUP1 DUP3 LT PUSH2 0x1581 JUMPI POP SWAP1 SWAP2 POP DUP2 ADD PUSH1 0x20 ADD PUSH2 0x760 PUSH2 0x750 JUMP JUMPDEST SWAP2 SWAP3 PUSH1 0x1 DUP2 PUSH1 0x20 SWAP3 SLOAD DUP4 DUP6 DUP9 ADD ADD MSTORE ADD SWAP2 ADD SWAP1 SWAP3 SWAP2 PUSH2 0x1569 JUMP JUMPDEST CALLVALUE PUSH2 0x241 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x0 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x241 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI PUSH2 0x15D0 PUSH2 0x22B JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD DUP1 ISZERO ISZERO DUP1 SWAP2 SUB PUSH2 0x241 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP2 DUP3 ISZERO PUSH2 0x1681 JUMPI PUSH2 0x1646 SWAP1 PUSH2 0x162E CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 MSTORE PUSH32 0x88BE536D5240C274A3B1D3A1BE54482FD9CAA294F08C62A7CDE569F49A3C4501 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP1 JUMP JUMPDEST PUSH1 0xFF NOT DUP2 SLOAD AND PUSH1 0xFF DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0x17307EAB39AB6107E8899845AD3D59BD9653F200F220920489CA2B5937696C31 PUSH1 0x20 CALLER SWAP3 LOG3 STOP JUMPDEST PUSH32 0xCED3E10000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST CALLVALUE PUSH2 0x241 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x241 JUMPI PUSH2 0x16E1 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x4B3 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x241 JUMPI PUSH2 0x1701 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x4B3 JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x241 JUMPI PUSH2 0x1722 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x4B3 JUMP JUMPDEST PUSH32 0xF0C57E16840DF040F15088DC2F81FE391C3923BEC73E23A9662EFC9C229C6A00 SLOAD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF PUSH2 0x1768 PUSH1 0xFF PUSH1 0x40 DUP8 SWAP1 SHR AND ISZERO SWAP6 PUSH8 0xFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST AND DUP1 ISZERO SWAP1 DUP2 PUSH2 0x195D JUMPI JUMPDEST PUSH1 0x1 EQ SWAP1 DUP2 PUSH2 0x1953 JUMPI JUMPDEST ISZERO SWAP1 DUP2 PUSH2 0x194A JUMPI JUMPDEST POP PUSH2 0x1920 JUMPI PUSH2 0x1805 SWAP3 DUP5 PUSH2 0x17FC PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000 PUSH32 0xF0C57E16840DF040F15088DC2F81FE391C3923BEC73E23A9662EFC9C229C6A00 SLOAD AND OR PUSH32 0xF0C57E16840DF040F15088DC2F81FE391C3923BEC73E23A9662EFC9C229C6A00 SSTORE JUMP JUMPDEST PUSH2 0x18A5 JUMPI PUSH2 0x2260 JUMP JUMPDEST PUSH2 0x180B JUMPI STOP JUMPDEST PUSH2 0x1876 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFF PUSH32 0xF0C57E16840DF040F15088DC2F81FE391C3923BEC73E23A9662EFC9C229C6A00 SLOAD AND PUSH32 0xF0C57E16840DF040F15088DC2F81FE391C3923BEC73E23A9662EFC9C229C6A00 SSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE PUSH32 0xC7F505B2F371AE2175EE4913F4499E1F2633A7B5936321EED1CDAEB6115181D2 SWAP1 PUSH1 0x20 SWAP1 LOG1 STOP JUMPDEST PUSH2 0x191B PUSH9 0x10000000000000000 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFF PUSH32 0xF0C57E16840DF040F15088DC2F81FE391C3923BEC73E23A9662EFC9C229C6A00 SLOAD AND OR PUSH32 0xF0C57E16840DF040F15088DC2F81FE391C3923BEC73E23A9662EFC9C229C6A00 SSTORE JUMP JUMPDEST PUSH2 0x2260 JUMP JUMPDEST PUSH32 0xF92EE8A900000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x0 REVERT JUMPDEST SWAP1 POP ISZERO CODESIZE PUSH2 0x1784 JUMP JUMPDEST ADDRESS EXTCODESIZE ISZERO SWAP2 POP PUSH2 0x177C JUMP JUMPDEST DUP6 SWAP2 POP PUSH2 0x1772 JUMP JUMPDEST CALLVALUE PUSH2 0x241 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI PUSH2 0x76C PUSH1 0x40 DUP1 MLOAD SWAP1 PUSH2 0x1988 DUP2 DUP4 PUSH2 0x46F JUMP JUMPDEST PUSH1 0x5 DUP3 MSTORE PUSH32 0x352E302E30000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP4 ADD MSTORE MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x6DD JUMP JUMPDEST CALLVALUE PUSH2 0x241 JUMPI PUSH1 0x0 PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1B1D JUMPI PUSH1 0x24 CALLDATALOAD PUSH1 0x4 CALLDATALOAD CALLER ISZERO PUSH2 0x1AF1 JUMPI SWAP1 PUSH2 0x1A0B PUSH1 0x40 MLOAD SWAP3 PUSH1 0x1 DUP5 MSTORE PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD SWAP2 PUSH1 0x1 DUP4 MSTORE PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP2 PUSH1 0x20 SWAP2 DUP2 PUSH1 0x40 MLOAD PUSH2 0x1A1E PUSH1 0x20 DUP3 PUSH2 0x46F JUMP JUMPDEST MSTORE PUSH1 0x1 SWAP3 DUP4 SWAP3 POP PUSH2 0x1A32 DUP6 DUP4 PUSH1 0x0 CALLER PUSH2 0x339C JUMP JUMPDEST PUSH1 0x0 SWAP5 PUSH1 0x0 SWAP4 JUMPDEST PUSH2 0x1A89 JUMPI JUMPDEST PUSH2 0x56E DUP7 PUSH32 0x4A593662EE04D27B6A00EBB31BE7FE0C102C2ADE82A7C5D764F2DF05DC4E2801 SLOAD SUB PUSH32 0x4A593662EE04D27B6A00EBB31BE7FE0C102C2ADE82A7C5D764F2DF05DC4E2801 SSTORE JUMP JUMPDEST DUP3 MLOAD DUP5 LT ISZERO PUSH2 0x1AEC JUMPI DUP5 DUP1 SWAP7 DUP6 PUSH1 0x5 SWAP8 SWAP7 SWAP8 SHL SWAP1 PUSH2 0x1ADB DUP6 DUP1 DUP5 DUP8 ADD ADD MLOAD SWAP4 DUP9 ADD ADD MLOAD PUSH1 0x0 MSTORE PUSH32 0x4A593662EE04D27B6A00EBB31BE7FE0C102C2ADE82A7C5D764F2DF05DC4E2800 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP1 JUMP JUMPDEST DUP3 DUP2 SLOAD SUB SWAP1 SSTORE ADD SWAP6 ADD SWAP4 SWAP5 SWAP6 PUSH2 0x1A39 JUMP JUMPDEST PUSH2 0x1A3E JUMP JUMPDEST PUSH1 0x24 DUP4 PUSH32 0x1A8351400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP1 PUSH1 0x4 MSTORE REVERT JUMPDEST DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x241 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI PUSH1 0x4 CALLDATALOAD PUSH1 0x0 MSTORE PUSH32 0x4A593662EE04D27B6A00EBB31BE7FE0C102C2ADE82A7C5D764F2DF05DC4E2800 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH1 0x0 KECCAK256 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x241 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH32 0x9F2DF0FED2C77648DE5860A4CC508CD0818C85B8B8A1AB4CEEEF8D981C8956A6 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x241 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI PUSH2 0x56E PUSH1 0x4 CALLDATALOAD PUSH2 0x1BC5 PUSH2 0x246 JUMP JUMPDEST SWAP1 PUSH2 0x1C00 PUSH2 0xBCB DUP3 PUSH1 0x0 MSTORE PUSH32 0x2DD7BC7DEC4DCEEDDA775E58DD541E08A116C6C53815C0BD028192F7B626800 PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x40 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x2752 JUMP JUMPDEST CALLVALUE PUSH2 0x241 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI PUSH1 0x20 PUSH1 0xFF PUSH2 0x142E PUSH2 0x1C25 PUSH2 0x22B JUMP JUMPDEST PUSH2 0x162E PUSH2 0x1C30 PUSH2 0x246 JUMP JUMPDEST SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 MSTORE PUSH32 0x88BE536D5240C274A3B1D3A1BE54482FD9CAA294F08C62A7CDE569F49A3C4501 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP1 JUMP JUMPDEST CALLVALUE PUSH2 0x241 JUMPI PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI PUSH2 0x1C82 PUSH2 0x22B JUMP JUMPDEST PUSH2 0x1C8A PUSH2 0x246 JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP1 PUSH1 0x64 CALLDATALOAD SWAP3 PUSH1 0x84 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x241 JUMPI PUSH2 0x1CB2 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x4B3 JUMP JUMPDEST SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND CALLER DUP2 EQ ISZERO DUP1 PUSH2 0x1D43 JUMPI JUMPDEST PUSH2 0x1D12 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND ISZERO PUSH2 0x11FF JUMPI ISZERO PUSH2 0x12A3 JUMPI PUSH2 0x56E SWAP5 PUSH2 0x1D0A PUSH1 0x40 MLOAD SWAP3 PUSH1 0x1 DUP5 MSTORE PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD SWAP2 PUSH1 0x1 DUP4 MSTORE PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP3 SWAP1 SWAP2 PUSH2 0x2C2F JUMP JUMPDEST PUSH32 0xE237D92200000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0x1D4E CALLER DUP5 PUSH2 0x2374 JUMP JUMPDEST ISZERO PUSH2 0x1CC7 JUMP JUMPDEST ISZERO PUSH2 0x1D5B JUMPI JUMP JUMPDEST PUSH1 0x84 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616C6C6572206973206E6F7420616E2061646D696E20726F6C652061757468 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6F72697365640000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE REVERT JUMPDEST SWAP1 PUSH2 0x1DF2 PUSH1 0x20 SWAP3 DUP3 DUP2 MLOAD SWAP5 DUP6 SWAP3 ADD PUSH2 0x6BA JUMP JUMPDEST ADD SWAP1 JUMP JUMPDEST SWAP4 SWAP3 SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND CALLER DUP2 EQ ISZERO DUP1 PUSH2 0x1E2F JUMPI JUMPDEST PUSH2 0x1D12 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ISZERO PUSH2 0x11FF JUMPI ISZERO PUSH2 0x12A3 JUMPI PUSH2 0x61A SWAP5 PUSH2 0x2C2F JUMP JUMPDEST POP PUSH1 0xFF PUSH2 0x1E72 CALLER PUSH2 0x162E DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 MSTORE PUSH32 0x88BE536D5240C274A3B1D3A1BE54482FD9CAA294F08C62A7CDE569F49A3C4501 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD AND ISZERO PUSH2 0x1E0E JUMP JUMPDEST SWAP1 PUSH2 0x1E84 DUP3 PUSH2 0xA6F JUMP JUMPDEST PUSH2 0x1E91 PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x46F JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x1F NOT PUSH2 0x1EA1 DUP3 SWAP5 PUSH2 0xA6F JUMP JUMPDEST ADD SWAP1 PUSH1 0x20 CALLDATASIZE SWAP2 ADD CALLDATACOPY JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x1EBF JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP2 SWAP1 SWAP2 DUP1 MLOAD DUP4 MLOAD DUP1 DUP3 SUB PUSH2 0x1F89 JUMPI POP POP PUSH2 0x1F08 DUP2 MLOAD PUSH2 0x1E7A JUMP JUMPDEST SWAP1 PUSH1 0x0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x1F82 JUMPI DUP1 PUSH2 0x1F70 PUSH1 0x1 SWAP3 PUSH1 0x5 SHL PUSH1 0x20 DUP1 DUP3 DUP8 ADD ADD MLOAD SWAP2 DUP10 ADD ADD MLOAD PUSH1 0x0 MSTORE PUSH32 0x88BE536D5240C274A3B1D3A1BE54482FD9CAA294F08C62A7CDE569F49A3C4500 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH2 0x1F7B DUP3 DUP7 PUSH2 0x1EAB JUMP JUMPDEST MSTORE ADD PUSH2 0x1F0C JUMP JUMPDEST POP SWAP1 SWAP3 POP POP JUMP JUMPDEST PUSH32 0x5B05999100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH1 0x0 REVERT JUMPDEST ISZERO PUSH2 0x1FC0 JUMPI JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616C6C6572206973206E6F742061206D696E74657200000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 NOT DUP2 EQ PUSH2 0x205C JUMPI PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH2 0x201E JUMP JUMPDEST PUSH1 0x1F DUP2 GT PUSH2 0x206D JUMPI POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x20 PUSH1 0x1F DUP5 ADD PUSH1 0x5 SHR DUP4 ADD SWAP4 LT PUSH2 0x20AA JUMPI JUMPDEST PUSH1 0x1F ADD PUSH1 0x5 SHR ADD SWAP1 JUMPDEST DUP2 DUP2 LT PUSH2 0x209E JUMPI POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x2093 JUMP JUMPDEST SWAP1 SWAP2 POP DUP2 SWAP1 PUSH2 0x208A JUMP JUMPDEST PUSH1 0x1F DUP2 GT PUSH2 0x20C0 JUMPI POP POP JUMP JUMPDEST PUSH32 0x88BE536D5240C274A3B1D3A1BE54482FD9CAA294F08C62A7CDE569F49A3C4502 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x20 PUSH1 0x1F DUP5 ADD PUSH1 0x5 SHR DUP4 ADD SWAP4 LT PUSH2 0x211C JUMPI JUMPDEST PUSH1 0x1F ADD PUSH1 0x5 SHR ADD SWAP1 JUMPDEST DUP2 DUP2 LT PUSH2 0x2110 JUMPI POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x2105 JUMP JUMPDEST SWAP1 SWAP2 POP DUP2 SWAP1 PUSH2 0x20FC JUMP JUMPDEST PUSH1 0x1F DUP3 GT PUSH2 0x2133 JUMPI POP POP POP JUMP JUMPDEST PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x20 PUSH1 0x1F DUP5 ADD PUSH1 0x5 SHR DUP4 ADD SWAP4 LT PUSH2 0x216E JUMPI JUMPDEST PUSH1 0x1F ADD PUSH1 0x5 SHR ADD SWAP1 JUMPDEST DUP2 DUP2 LT PUSH2 0x2162 JUMPI POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x2157 JUMP JUMPDEST SWAP1 SWAP2 POP DUP2 SWAP1 PUSH2 0x214E JUMP JUMPDEST SWAP1 DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x492 JUMPI PUSH2 0x21A0 DUP2 PUSH2 0x2199 PUSH1 0x2 SLOAD PUSH2 0x570 JUMP JUMPDEST PUSH1 0x2 PUSH2 0x2126 JUMP JUMPDEST PUSH1 0x20 SWAP3 PUSH1 0x1F DUP3 GT PUSH1 0x1 EQ PUSH2 0x21E1 JUMPI PUSH2 0x21D1 SWAP3 SWAP4 DUP3 SWAP2 PUSH1 0x0 SWAP3 PUSH2 0x21D6 JUMPI JUMPDEST POP POP PUSH1 0x0 NOT DUP3 PUSH1 0x1 SHL SWAP3 PUSH1 0x3 SHL SHR NOT AND OR SWAP1 JUMP JUMPDEST PUSH1 0x2 SSTORE JUMP JUMPDEST ADD MLOAD SWAP1 POP CODESIZE DUP1 PUSH2 0x21BD JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 MSTORE PUSH1 0x1F NOT DUP3 AND SWAP4 PUSH32 0x405787FA12A823E0F2B7631CC41B3BA8828B3321CA811111FA75CD3AA3BB5ACE SWAP2 PUSH1 0x0 JUMPDEST DUP7 DUP2 LT PUSH2 0x2248 JUMPI POP DUP4 PUSH1 0x1 SWAP6 SWAP7 LT PUSH2 0x222F JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH1 0x2 SSTORE JUMP JUMPDEST ADD MLOAD PUSH1 0x0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE CODESIZE DUP1 DUP1 PUSH2 0x2224 JUMP JUMPDEST SWAP2 SWAP3 PUSH1 0x20 PUSH1 0x1 DUP2 SWAP3 DUP7 DUP6 ADD MLOAD DUP2 SSTORE ADD SWAP5 ADD SWAP3 ADD PUSH2 0x2211 JUMP JUMPDEST SWAP1 SWAP2 PUSH2 0x2276 SWAP1 PUSH2 0x226E PUSH2 0x2F38 JUMP JUMPDEST PUSH2 0x569 PUSH2 0x2F38 JUMP JUMPDEST PUSH2 0x227E PUSH2 0x2F38 JUMP JUMPDEST PUSH2 0x2287 CALLER PUSH2 0x25BE JUMP JUMPDEST POP DUP1 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x492 JUMPI PUSH2 0x22AE DUP3 PUSH2 0x22A9 PUSH1 0x1 SLOAD PUSH2 0x570 JUMP JUMPDEST PUSH2 0x2061 JUMP JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x1F DUP4 GT PUSH1 0x1 EQ PUSH2 0x22EA JUMPI SWAP2 DUP1 PUSH2 0x22E2 SWAP3 PUSH2 0x61A SWAP6 SWAP5 PUSH1 0x0 SWAP3 PUSH2 0x21D6 JUMPI POP POP PUSH1 0x0 NOT DUP3 PUSH1 0x1 SHL SWAP3 PUSH1 0x3 SHL SHR NOT AND OR SWAP1 JUMP JUMPDEST PUSH1 0x1 SSTORE PUSH2 0x2178 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 MSTORE PUSH1 0x1F NOT DUP4 AND SWAP2 SWAP1 PUSH32 0xB10E2D527612073B26EECDFD717E6A320CF44B4AFAC2B0732D9FCBE2B7FA0CF6 SWAP3 PUSH1 0x0 JUMPDEST DUP2 DUP2 LT PUSH2 0x235C JUMPI POP SWAP2 PUSH1 0x1 SWAP4 SWAP2 DUP6 PUSH2 0x61A SWAP8 SWAP7 SWAP5 LT PUSH2 0x2343 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH1 0x1 SSTORE PUSH2 0x2178 JUMP JUMPDEST ADD MLOAD PUSH1 0x0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE CODESIZE DUP1 DUP1 PUSH2 0x2335 JUMP JUMPDEST SWAP3 SWAP4 PUSH1 0x20 PUSH1 0x1 DUP2 SWAP3 DUP8 DUP7 ADD MLOAD DUP2 SSTORE ADD SWAP6 ADD SWAP4 ADD PUSH2 0x231B JUMP JUMPDEST PUSH1 0xFF SWAP2 PUSH2 0x162E PUSH2 0x23B6 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 MSTORE PUSH32 0x88BE536D5240C274A3B1D3A1BE54482FD9CAA294F08C62A7CDE569F49A3C4501 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD AND SWAP1 JUMP JUMPDEST SWAP1 DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x492 JUMPI PUSH2 0x2400 DUP2 PUSH2 0x23FB PUSH32 0x88BE536D5240C274A3B1D3A1BE54482FD9CAA294F08C62A7CDE569F49A3C4502 SLOAD PUSH2 0x570 JUMP JUMPDEST PUSH2 0x20B4 JUMP JUMPDEST PUSH1 0x20 SWAP3 PUSH1 0x1F DUP3 GT PUSH1 0x1 EQ PUSH2 0x2454 JUMPI PUSH2 0x2430 SWAP3 SWAP4 DUP3 SWAP2 PUSH1 0x0 SWAP3 PUSH2 0x21D6 JUMPI POP POP PUSH1 0x0 NOT DUP3 PUSH1 0x1 SHL SWAP3 PUSH1 0x3 SHL SHR NOT AND OR SWAP1 JUMP JUMPDEST PUSH32 0x88BE536D5240C274A3B1D3A1BE54482FD9CAA294F08C62A7CDE569F49A3C4502 SSTORE JUMP JUMPDEST PUSH32 0x88BE536D5240C274A3B1D3A1BE54482FD9CAA294F08C62A7CDE569F49A3C4502 PUSH1 0x0 MSTORE PUSH1 0x1F NOT DUP3 AND SWAP4 PUSH32 0xF429CB5E2EC84CBB765E76B31964A56CCDE03E7A6122D6CC4AFB19EDC55EDEED SWAP2 PUSH1 0x0 JUMPDEST DUP7 DUP2 LT PUSH2 0x24F9 JUMPI POP DUP4 PUSH1 0x1 SWAP6 SWAP7 LT PUSH2 0x24E0 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH32 0x88BE536D5240C274A3B1D3A1BE54482FD9CAA294F08C62A7CDE569F49A3C4502 SSTORE JUMP JUMPDEST ADD MLOAD PUSH1 0x0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE CODESIZE DUP1 DUP1 PUSH2 0x24B6 JUMP JUMPDEST SWAP2 SWAP3 PUSH1 0x20 PUSH1 0x1 DUP2 SWAP3 DUP7 DUP6 ADD MLOAD DUP2 SSTORE ADD SWAP5 ADD SWAP3 ADD PUSH2 0x24A3 JUMP JUMPDEST SWAP1 PUSH2 0x251B DUP3 PUSH2 0x497 JUMP JUMPDEST PUSH2 0x2528 PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x46F JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x1F NOT PUSH2 0x1EA1 DUP3 SWAP5 PUSH2 0x497 JUMP JUMPDEST DUP1 PUSH1 0x0 MSTORE PUSH32 0x2DD7BC7DEC4DCEEDDA775E58DD541E08A116C6C53815C0BD028192F7B626800 PUSH1 0x20 MSTORE PUSH1 0xFF PUSH2 0x2583 CALLER PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD AND ISZERO PUSH2 0x258D JUMPI POP JUMP JUMPDEST PUSH32 0xE2517D3F00000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0xB7DB2DD08FCB62D0C9E08C51941CAE53C267786A0B75803FB7960902FC8EF97D PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x266A JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH32 0xB7DB2DD08FCB62D0C9E08C51941CAE53C267786A0B75803FB7960902FC8EF97D PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE CALLER SWAP2 SWAP1 PUSH32 0x2F8788117E7EFF1D82E926EC794901D17C78024A50270940304540A733656F0D DUP2 DUP1 LOG4 PUSH1 0x1 SWAP1 JUMP JUMPDEST POP PUSH1 0x0 SWAP1 JUMP JUMPDEST DUP1 PUSH1 0x0 MSTORE PUSH32 0x2DD7BC7DEC4DCEEDDA775E58DD541E08A116C6C53815C0BD028192F7B626800 PUSH1 0x20 MSTORE PUSH1 0xFF PUSH2 0x26BB DUP4 PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD AND PUSH2 0x274B JUMPI DUP1 PUSH1 0x0 MSTORE PUSH32 0x2DD7BC7DEC4DCEEDDA775E58DD541E08A116C6C53815C0BD028192F7B626800 PUSH1 0x20 MSTORE PUSH2 0x270A DUP3 PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0xFF NOT DUP3 SLOAD AND OR SWAP1 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB CALLER SWAP3 AND SWAP1 PUSH32 0x2F8788117E7EFF1D82E926EC794901D17C78024A50270940304540A733656F0D PUSH1 0x0 DUP1 LOG4 PUSH1 0x1 SWAP1 JUMP JUMPDEST POP POP PUSH1 0x0 SWAP1 JUMP JUMPDEST DUP1 PUSH1 0x0 MSTORE PUSH32 0x2DD7BC7DEC4DCEEDDA775E58DD541E08A116C6C53815C0BD028192F7B626800 PUSH1 0x20 MSTORE PUSH1 0xFF PUSH2 0x279D DUP4 PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD AND ISZERO PUSH2 0x274B JUMPI DUP1 PUSH1 0x0 MSTORE PUSH32 0x2DD7BC7DEC4DCEEDDA775E58DD541E08A116C6C53815C0BD028192F7B626800 PUSH1 0x20 MSTORE PUSH2 0x27ED DUP3 PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP1 JUMP JUMPDEST PUSH1 0xFF NOT DUP2 SLOAD AND SWAP1 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB CALLER SWAP3 AND SWAP1 PUSH32 0xF6391F5C32D9C69D2A47EA670B442974B53935D1EDC7FD64EB21E047A839171B PUSH1 0x0 DUP1 LOG4 PUSH1 0x1 SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x241 JUMPI MLOAD SWAP1 JUMP JUMPDEST SWAP4 SWAP2 SWAP1 SWAP2 PUSH2 0x284B DUP3 DUP5 DUP8 PUSH1 0x0 PUSH2 0x339C JUMP JUMPDEST PUSH1 0x0 SWAP5 DUP6 JUMPDEST DUP5 MLOAD DUP8 LT ISZERO PUSH2 0x28BD JUMPI PUSH2 0x28B5 PUSH1 0x1 SWAP2 DUP9 PUSH1 0x5 SHL SWAP1 PUSH2 0x28A3 PUSH1 0x20 DUP1 DUP5 DUP11 ADD ADD MLOAD SWAP4 DUP11 ADD ADD MLOAD PUSH1 0x0 MSTORE PUSH32 0x4A593662EE04D27B6A00EBB31BE7FE0C102C2ADE82A7C5D764F2DF05DC4E2800 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP1 JUMP JUMPDEST PUSH2 0x28AE DUP4 DUP3 SLOAD PUSH2 0x32DA JUMP JUMPDEST SWAP1 SSTORE PUSH2 0x32DA JUMP JUMPDEST SWAP7 ADD SWAP6 PUSH2 0x2850 JUMP JUMPDEST PUSH2 0x2915 SWAP2 SWAP6 SWAP5 SWAP3 SWAP7 POP PUSH2 0x28F1 SWAP1 PUSH32 0x4A593662EE04D27B6A00EBB31BE7FE0C102C2ADE82A7C5D764F2DF05DC4E2801 SLOAD PUSH2 0x32DA JUMP JUMPDEST PUSH32 0x4A593662EE04D27B6A00EBB31BE7FE0C102C2ADE82A7C5D764F2DF05DC4E2801 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND ISZERO DUP1 PUSH2 0x296C JUMPI JUMPDEST ISZERO PUSH2 0x2932 JUMPI JUMPDEST POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 SUB PUSH2 0x295B JUMPI SWAP1 PUSH1 0x20 DUP1 PUSH2 0x2952 SWAP6 SWAP4 ADD MLOAD SWAP2 ADD MLOAD SWAP2 PUSH1 0x0 CALLER PUSH2 0x31D1 JUMP JUMPDEST CODESIZE DUP1 DUP1 DUP1 PUSH2 0x292C JUMP JUMPDEST PUSH2 0x2967 SWAP4 PUSH1 0x0 CALLER PUSH2 0x3024 JUMP JUMPDEST PUSH2 0x2952 JUMP JUMPDEST SWAP4 PUSH1 0x0 SWAP6 SWAP2 SWAP4 PUSH1 0x0 SWAP7 JUMPDEST DUP6 MLOAD DUP9 LT ISZERO PUSH2 0x29D5 JUMPI PUSH1 0x1 SWAP1 DUP9 PUSH1 0x5 SHL SWAP1 PUSH2 0x29C6 PUSH1 0x20 DUP1 DUP5 DUP11 ADD ADD MLOAD SWAP4 DUP11 ADD ADD MLOAD PUSH1 0x0 MSTORE PUSH32 0x4A593662EE04D27B6A00EBB31BE7FE0C102C2ADE82A7C5D764F2DF05DC4E2800 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP1 JUMP JUMPDEST DUP3 DUP2 SLOAD SUB SWAP1 SSTORE ADD SWAP8 ADD SWAP7 PUSH2 0x2976 JUMP JUMPDEST PUSH2 0x2A27 SWAP2 SWAP6 SWAP4 SWAP8 POP SWAP6 SWAP2 SWAP6 PUSH32 0x4A593662EE04D27B6A00EBB31BE7FE0C102C2ADE82A7C5D764F2DF05DC4E2801 SLOAD SUB PUSH32 0x4A593662EE04D27B6A00EBB31BE7FE0C102C2ADE82A7C5D764F2DF05DC4E2801 SSTORE JUMP JUMPDEST PUSH2 0x2926 JUMP JUMPDEST SWAP1 SWAP2 SWAP4 SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO SWAP1 DUP2 DUP1 ISZERO PUSH2 0x2C27 JUMPI JUMPDEST ISZERO PUSH2 0x2BA3 JUMPI DUP5 DUP4 PUSH1 0x0 PUSH2 0x2A57 SWAP4 PUSH2 0x339C JUMP JUMPDEST PUSH2 0x2B0F JUMPI JUMPDEST PUSH1 0x0 DUP1 JUMPDEST DUP3 MLOAD DUP3 LT ISZERO PUSH2 0x2ABF JUMPI PUSH1 0x1 SWAP1 DUP3 PUSH1 0x5 SHL SWAP1 PUSH2 0x2AB0 PUSH1 0x20 DUP1 DUP5 DUP11 ADD ADD MLOAD SWAP4 DUP8 ADD ADD MLOAD PUSH1 0x0 MSTORE PUSH32 0x4A593662EE04D27B6A00EBB31BE7FE0C102C2ADE82A7C5D764F2DF05DC4E2800 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP1 JUMP JUMPDEST DUP3 DUP2 SLOAD SUB SWAP1 SSTORE ADD SWAP2 ADD SWAP1 PUSH2 0x2A60 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x61A SWAP2 SWAP3 POP PUSH32 0x4A593662EE04D27B6A00EBB31BE7FE0C102C2ADE82A7C5D764F2DF05DC4E2801 SLOAD SUB PUSH32 0x4A593662EE04D27B6A00EBB31BE7FE0C102C2ADE82A7C5D764F2DF05DC4E2801 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 JUMPDEST DUP3 MLOAD DUP3 LT ISZERO PUSH2 0x2B6E JUMPI PUSH2 0x2B66 PUSH1 0x1 SWAP2 DUP4 PUSH1 0x5 SHL SWAP1 PUSH2 0x28A3 PUSH1 0x20 DUP1 DUP5 DUP12 ADD ADD MLOAD SWAP4 DUP9 ADD ADD MLOAD PUSH1 0x0 MSTORE PUSH32 0x4A593662EE04D27B6A00EBB31BE7FE0C102C2ADE82A7C5D764F2DF05DC4E2800 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP2 ADD SWAP1 PUSH2 0x2B13 JUMP JUMPDEST PUSH2 0x2B9E SWAP2 POP PUSH2 0x28F1 SWAP1 PUSH32 0x4A593662EE04D27B6A00EBB31BE7FE0C102C2ADE82A7C5D764F2DF05DC4E2801 SLOAD PUSH2 0x32DA JUMP JUMPDEST PUSH2 0x2A5C JUMP JUMPDEST PUSH1 0x84 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4120536F756C626F756E6420746F6B656E2063616E6E6F74206265207472616E PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7366657272656400000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE REVERT JUMPDEST POP PUSH1 0x1 PUSH2 0x2A45 JUMP JUMPDEST SWAP2 SWAP4 SWAP3 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND ISZERO DUP1 DUP1 ISZERO PUSH2 0x2E0B JUMPI JUMPDEST ISZERO PUSH2 0x2BA3 JUMPI PUSH2 0x2C57 DUP4 DUP8 DUP5 DUP8 PUSH2 0x339C JUMP JUMPDEST PUSH2 0x2D6F JUMPI JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO DUP1 PUSH2 0x2CB1 JUMPI JUMPDEST ISZERO PUSH2 0x2C7A JUMPI JUMPDEST POP POP POP POP POP JUMP JUMPDEST DUP5 MLOAD PUSH1 0x1 SUB PUSH2 0x2CA0 JUMPI PUSH1 0x20 DUP1 PUSH2 0x2C96 SWAP7 ADD MLOAD SWAP3 ADD MLOAD SWAP3 CALLER PUSH2 0x31D1 JUMP JUMPDEST CODESIZE DUP1 DUP1 DUP1 DUP1 PUSH2 0x2C73 JUMP JUMPDEST PUSH2 0x2CAC SWAP5 SWAP2 SWAP3 CALLER PUSH2 0x3024 JUMP JUMPDEST PUSH2 0x2C96 JUMP JUMPDEST SWAP5 SWAP4 PUSH1 0x0 SWAP4 SWAP1 SWAP2 DUP5 JUMPDEST DUP7 MLOAD DUP7 LT ISZERO PUSH2 0x2D19 JUMPI PUSH1 0x1 SWAP1 DUP7 PUSH1 0x5 SHL SWAP1 PUSH2 0x2D0A PUSH1 0x20 DUP1 DUP5 DUP11 ADD ADD MLOAD SWAP4 DUP12 ADD ADD MLOAD PUSH1 0x0 MSTORE PUSH32 0x4A593662EE04D27B6A00EBB31BE7FE0C102C2ADE82A7C5D764F2DF05DC4E2800 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP1 JUMP JUMPDEST DUP3 DUP2 SLOAD SUB SWAP1 SSTORE ADD SWAP6 ADD SWAP5 PUSH2 0x2CBA JUMP JUMPDEST PUSH2 0x2D6A SWAP2 SWAP4 SWAP7 SWAP8 SWAP3 SWAP6 POP PUSH32 0x4A593662EE04D27B6A00EBB31BE7FE0C102C2ADE82A7C5D764F2DF05DC4E2801 SLOAD SUB PUSH32 0x4A593662EE04D27B6A00EBB31BE7FE0C102C2ADE82A7C5D764F2DF05DC4E2801 SSTORE JUMP JUMPDEST PUSH2 0x2C6D JUMP JUMPDEST SWAP4 SWAP3 PUSH1 0x0 SWAP3 DUP4 JUMPDEST DUP6 MLOAD DUP6 LT ISZERO PUSH2 0x2DD1 JUMPI PUSH2 0x2DC9 PUSH1 0x1 SWAP2 DUP7 PUSH1 0x5 SHL SWAP1 PUSH2 0x28A3 PUSH1 0x20 DUP1 DUP5 DUP11 ADD ADD MLOAD SWAP4 DUP12 ADD ADD MLOAD PUSH1 0x0 MSTORE PUSH32 0x4A593662EE04D27B6A00EBB31BE7FE0C102C2ADE82A7C5D764F2DF05DC4E2800 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP5 ADD SWAP4 PUSH2 0x2D76 JUMP JUMPDEST PUSH2 0x2E06 SWAP2 SWAP5 POP PUSH2 0x28F1 SWAP1 SWAP7 SWAP3 SWAP6 SWAP7 PUSH32 0x4A593662EE04D27B6A00EBB31BE7FE0C102C2ADE82A7C5D764F2DF05DC4E2801 SLOAD PUSH2 0x32DA JUMP JUMPDEST PUSH2 0x2C5C JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ISZERO PUSH2 0x2C46 JUMP JUMPDEST SWAP1 DUP2 EXTCODESIZE ISZERO PUSH2 0x2F01 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD AND OR PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SSTORE PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B PUSH1 0x0 DUP1 LOG2 DUP1 MLOAD ISZERO PUSH2 0x2ECE JUMPI PUSH2 0x2ECB SWAP2 PUSH2 0x32BC JUMP JUMPDEST POP JUMP JUMPDEST POP POP CALLVALUE PUSH2 0x2ED7 JUMPI JUMP JUMPDEST PUSH32 0xB398979F00000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 PUSH32 0x4C9C8CE300000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0xFF PUSH32 0xF0C57E16840DF040F15088DC2F81FE391C3923BEC73E23A9662EFC9C229C6A00 SLOAD PUSH1 0x40 SHR AND ISZERO PUSH2 0x2F67 JUMPI JUMP JUMPDEST PUSH32 0xD7E6BCF800000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x0 REVERT JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x241 JUMPI MLOAD PUSH2 0x713 DUP2 PUSH2 0x2DD JUMP JUMPDEST SWAP4 SWAP1 PUSH2 0x713 SWAP6 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x2FE6 SWAP5 DUP2 PUSH2 0x2FD8 SWAP5 AND DUP9 MSTORE AND PUSH1 0x20 DUP8 ADD MSTORE PUSH1 0xA0 PUSH1 0x40 DUP8 ADD MSTORE PUSH1 0xA0 DUP7 ADD SWAP1 PUSH2 0xD26 JUMP JUMPDEST SWAP1 DUP5 DUP3 SUB PUSH1 0x60 DUP7 ADD MSTORE PUSH2 0xD26 JUMP JUMPDEST SWAP2 PUSH1 0x80 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0x6DD JUMP JUMPDEST RETURNDATASIZE ISZERO PUSH2 0x301F JUMPI RETURNDATASIZE SWAP1 PUSH2 0x3005 DUP3 PUSH2 0x497 JUMP JUMPDEST SWAP2 PUSH2 0x3013 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x46F JUMP JUMPDEST DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY JUMP JUMPDEST PUSH1 0x60 SWAP1 JUMP JUMPDEST SWAP1 SWAP2 SWAP5 SWAP3 SWAP4 DUP6 EXTCODESIZE PUSH2 0x3038 JUMPI JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 SWAP4 PUSH2 0x3073 SWAP2 PUSH1 0x40 MLOAD SWAP7 DUP8 SWAP6 DUP7 SWAP6 PUSH32 0xBC197C8100000000000000000000000000000000000000000000000000000000 DUP8 MSTORE PUSH1 0x4 DUP8 ADD PUSH2 0x2FA6 JUMP JUMPDEST SUB DUP2 PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND GAS CALL PUSH1 0x0 SWAP2 DUP2 PUSH2 0x316C JUMPI JUMPDEST POP PUSH2 0x30E1 JUMPI POP PUSH2 0x309A PUSH2 0x2FF4 JUMP JUMPDEST DUP1 MLOAD SWAP2 SWAP1 DUP3 PUSH2 0x30DA JUMPI PUSH32 0x57F447CE00000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x20 SWAP2 POP ADD REVERT JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH32 0xBC197C8100000000000000000000000000000000000000000000000000000000 SWAP2 AND SUB PUSH2 0x3136 JUMPI POP CODESIZE DUP1 DUP1 DUP1 DUP1 DUP1 PUSH2 0x3030 JUMP JUMPDEST PUSH32 0x57F447CE00000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0x318F SWAP2 SWAP3 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x3196 JUMPI JUMPDEST PUSH2 0x3187 DUP2 DUP4 PUSH2 0x46F JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x2F91 JUMP JUMPDEST SWAP1 CODESIZE PUSH2 0x308C JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x317D JUMP JUMPDEST SWAP2 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0xA0 SWAP5 DUP2 PUSH2 0x713 SWAP9 SWAP8 SWAP5 AND DUP6 MSTORE AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE DUP2 PUSH1 0x80 DUP3 ADD MSTORE ADD SWAP1 PUSH2 0x6DD JUMP JUMPDEST SWAP1 SWAP2 SWAP5 SWAP3 SWAP4 DUP6 EXTCODESIZE PUSH2 0x31E4 JUMPI POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 SWAP4 PUSH2 0x321F SWAP2 PUSH1 0x40 MLOAD SWAP7 DUP8 SWAP6 DUP7 SWAP6 PUSH32 0xF23A6E6100000000000000000000000000000000000000000000000000000000 DUP8 MSTORE PUSH1 0x4 DUP8 ADD PUSH2 0x319D JUMP JUMPDEST SUB DUP2 PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND GAS CALL PUSH1 0x0 SWAP2 DUP2 PUSH2 0x329B JUMPI JUMPDEST POP PUSH2 0x3246 JUMPI POP PUSH2 0x309A PUSH2 0x2FF4 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH32 0xF23A6E6100000000000000000000000000000000000000000000000000000000 SWAP2 AND SUB PUSH2 0x3136 JUMPI POP CODESIZE DUP1 DUP1 DUP1 DUP1 DUP1 PUSH2 0x3030 JUMP JUMPDEST PUSH2 0x32B5 SWAP2 SWAP3 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x3196 JUMPI PUSH2 0x3187 DUP2 DUP4 PUSH2 0x46F JUMP JUMPDEST SWAP1 CODESIZE PUSH2 0x3238 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x713 SWAP4 PUSH1 0x20 DUP2 MLOAD SWAP2 ADD DUP5 GAS DELEGATECALL PUSH2 0x32D4 PUSH2 0x2FF4 JUMP JUMPDEST SWAP2 PUSH2 0x32E7 JUMP JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x205C JUMPI JUMP JUMPDEST SWAP1 PUSH2 0x3326 JUMPI POP DUP1 MLOAD ISZERO PUSH2 0x32FC JUMPI PUSH1 0x20 DUP2 MLOAD SWAP2 ADD REVERT JUMPDEST PUSH32 0xD6BDA27500000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x0 REVERT JUMPDEST DUP2 MLOAD ISZERO DUP1 PUSH2 0x336E JUMPI JUMPDEST PUSH2 0x3337 JUMPI POP SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH32 0x9996B31500000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x332F JUMP JUMPDEST SWAP1 SWAP2 PUSH2 0x338E PUSH2 0x713 SWAP4 PUSH1 0x40 DUP5 MSTORE PUSH1 0x40 DUP5 ADD SWAP1 PUSH2 0xD26 JUMP JUMPDEST SWAP2 PUSH1 0x20 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0xD26 JUMP JUMPDEST SWAP4 SWAP3 SWAP2 DUP1 MLOAD DUP4 MLOAD SWAP1 DUP2 DUP2 SUB PUSH2 0x1F89 JUMPI POP POP PUSH1 0x0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x351C JUMPI DUP1 PUSH1 0x5 SHL SWAP1 PUSH1 0x20 DUP1 DUP4 DUP6 ADD ADD MLOAD SWAP3 DUP7 ADD ADD MLOAD DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND PUSH2 0x3442 JUMPI JUMPDEST PUSH1 0x1 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x33F6 JUMPI JUMPDEST POP POP POP ADD PUSH2 0x33B0 JUMP JUMPDEST PUSH2 0x3438 SWAP2 PUSH2 0x162E PUSH2 0x3430 SWAP3 PUSH1 0x0 MSTORE PUSH32 0x88BE536D5240C274A3B1D3A1BE54482FD9CAA294F08C62A7CDE569F49A3C4500 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP2 DUP3 SLOAD PUSH2 0x32DA JUMP JUMPDEST SWAP1 SSTORE CODESIZE DUP5 DUP2 PUSH2 0x33ED JUMP JUMPDEST POP SWAP1 SWAP2 PUSH2 0x347C DUP9 PUSH2 0x162E DUP4 PUSH1 0x0 MSTORE PUSH32 0x88BE536D5240C274A3B1D3A1BE54482FD9CAA294F08C62A7CDE569F49A3C4500 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD DUP3 DUP2 LT PUSH2 0x34CC JUMPI DUP3 SWAP2 PUSH1 0x1 SWAP5 SWAP4 DUP8 SWAP3 SUB PUSH2 0x34C4 DUP12 PUSH2 0x162E DUP5 PUSH1 0x0 MSTORE PUSH32 0x88BE536D5240C274A3B1D3A1BE54482FD9CAA294F08C62A7CDE569F49A3C4500 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE SWAP4 POP PUSH2 0x33DB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x3DEE4C500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x44 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x64 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x84 SWAP1 REVERT JUMPDEST POP DUP1 MLOAD SWAP4 SWAP5 SWAP4 SWAP2 SWAP3 SWAP2 PUSH1 0x1 SUB PUSH2 0x357F JUMPI PUSH1 0x20 SWAP1 DUP2 ADD MLOAD SWAP2 DUP2 ADD MLOAD PUSH1 0x40 DUP1 MLOAD SWAP4 DUP5 MSTORE SWAP2 DUP4 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND SWAP4 SWAP1 SWAP3 AND SWAP2 CALLER SWAP2 PUSH32 0xC3D58168C5AE7397731D063D5BBF3D657854427343F4C083240F7AACAA2D0F62 SWAP2 DUP2 SWAP1 DUP2 ADD JUMPDEST SUB SWAP1 LOG4 JUMP JUMPDEST SWAP1 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x4A39DC06D4C0DBC64B70AF90FD698A233A518AA5D07E595D983B8C0526C8F7FB SWAP2 PUSH2 0x357A DUP3 PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP4 AND SWAP8 AND SWAP6 CALLER SWAP6 DUP4 PUSH2 0x3377 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xF7 0xAD 0xDB 0xC7 0xD3 NOT CHAINID 0xDD 0xDC DUP4 SWAP4 PC SMOD 0xE4 SWAP11 0x26 0xC2 CALLDATACOPY 0xE7 CALL DUP16 0xDF DUP9 STOP 0xDC OR 0xCA 0xA9 SAR 0xA5 PUSH1 0x6E PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ",
              "sourceMap": "760:3370:31:-:0;;;;;;;1171:4:3;1163:13;;760:3370:31;;;;;;1163:13:3;760:3370:31;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "functionDebugData": {
                "abi_decode_address": {
                  "entryPoint": 604,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_decode_address_11306": {
                  "entryPoint": 555,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "abi_decode_address_11321": {
                  "entryPoint": 582,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "abi_decode_array_uint256_dyn": {
                  "entryPoint": 2695,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_bytes32_fromMemory": {
                  "entryPoint": 10283,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_bytes4_fromMemory": {
                  "entryPoint": 12177,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_string": {
                  "entryPoint": 1203,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_decode_uint256": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "abi_decode_uint256_11362": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "abi_decode_uint256_11363": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "abi_encode_address": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_encode_address_address_array_uint256_dyn_array_uint256_dyn_bytes": {
                  "entryPoint": 12198,
                  "id": null,
                  "parameterSlots": 6,
                  "returnSlots": 1
                },
                "abi_encode_address_address_uint256_uint256_bytes": {
                  "entryPoint": 12701,
                  "id": null,
                  "parameterSlots": 6,
                  "returnSlots": 1
                },
                "abi_encode_address_uint256_uint256_uint256": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 5,
                  "returnSlots": 1
                },
                "abi_encode_array_uint256_dyn": {
                  "entryPoint": 3418,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_array_uint256_dyn_array_uint256_dyn": {
                  "entryPoint": 13175,
                  "id": null,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "abi_encode_array_uint256_dyn_memory_ptr": {
                  "entryPoint": 3366,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_bytes32": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_encode_rational_by": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_encode_string": {
                  "entryPoint": 1794,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_string_memory_ptr": {
                  "entryPoint": 7647,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_string_to_string": {
                  "entryPoint": 1757,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "abi_encode_stringliteral": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "abi_encode_uint256_uint256": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "abi_encode_uint256_uint256_11441": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "allocate_and_zero_memory_array_array_uint256_dyn": {
                  "entryPoint": 7802,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "allocate_and_zero_memory_array_string": {
                  "entryPoint": 9489,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "array_allocation_size_array_uint256_dyn": {
                  "entryPoint": 2671,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "array_allocation_size_string": {
                  "entryPoint": 1175,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "array_dataslot_string_storage": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "array_dataslot_string_storage_11391": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "array_dataslot_string_storage_11401": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "checked_add_uint256": {
                  "entryPoint": 13018,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "clean_up_bytearray_end_slots_string_storage": {
                  "entryPoint": 8486,
                  "id": null,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "clean_up_bytearray_end_slots_string_storage_11390": {
                  "entryPoint": 8289,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "clean_up_bytearray_end_slots_string_storage_11400": {
                  "entryPoint": 8372,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "cleanup_bool": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "copy_array_from_storage_to_memory_string": {
                  "entryPoint": 1475,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "copy_byte_array_to_storage_from_string_to_string": {
                  "entryPoint": 8568,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "copy_memory_to_memory_with_cleanup": {
                  "entryPoint": 1722,
                  "id": null,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "external_fun_DEFAULT_ADMIN_ROLE": {
                  "entryPoint": 5531,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "external_fun_MINTER_ROLE": {
                  "entryPoint": 7019,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "external_fun_UPGRADE_INTERFACE_VERSION": {
                  "entryPoint": 6501,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "external_fun_balanceOf": {
                  "entryPoint": 624,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "external_fun_balanceOfBatch": {
                  "entryPoint": 3435,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "external_fun_burn": {
                  "entryPoint": 6596,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "external_fun_burnBatch": {
                  "entryPoint": 4654,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "external_fun_exists": {
                  "entryPoint": 4106,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "external_fun_getCurrentTokenId": {
                  "entryPoint": 4290,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "external_fun_getRoleAdmin": {
                  "entryPoint": 2587,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "external_fun_grantRole": {
                  "entryPoint": 2929,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "external_fun_hasRole": {
                  "entryPoint": 5063,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "external_fun_initialize": {
                  "entryPoint": 5808,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "external_fun_isApprovedForAll": {
                  "entryPoint": 7173,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "external_fun_mint": {
                  "entryPoint": 5178,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "external_fun_mintBatch": {
                  "entryPoint": 4386,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "external_fun_name": {
                  "entryPoint": 1814,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "external_fun_pause": {
                  "entryPoint": 4818,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "external_fun_paused": {
                  "entryPoint": 4320,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "external_fun_proxiableUUID": {
                  "entryPoint": 4183,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "external_fun_renounceRole": {
                  "entryPoint": 3029,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "external_fun_revokeRole": {
                  "entryPoint": 7078,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "external_fun_safeBatchTransferFrom": {
                  "entryPoint": 2788,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "external_fun_safeTransferFrom": {
                  "entryPoint": 7273,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "external_fun_setApprovalForAll": {
                  "entryPoint": 5559,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "external_fun_setURI": {
                  "entryPoint": 1272,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "external_fun_supportsInterface": {
                  "entryPoint": 775,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "external_fun_symbol": {
                  "entryPoint": 5363,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "external_fun_totalSupply": {
                  "entryPoint": 6944,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "external_fun_totalSupply_2090": {
                  "entryPoint": 2526,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "external_fun_unpause": {
                  "entryPoint": 3124,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "external_fun_upgradeToAndCall": {
                  "entryPoint": 3628,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "external_fun_uri": {
                  "entryPoint": 2035,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "extract_byte_array_length": {
                  "entryPoint": 1392,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "extract_from_storage_value_offsett_bool": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "extract_from_storage_value_offsett_uint64": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "extract_returndata": {
                  "entryPoint": 12276,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 1
                },
                "extract_used_part_and_set_length_of_short_byte_array": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "finalize_allocation": {
                  "entryPoint": 1135,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "fun_asSingletonArrays": {
                  "entryPoint": null,
                  "id": 2005,
                  "parameterSlots": 2,
                  "returnSlots": 2
                },
                "fun_balanceOfBatch": {
                  "entryPoint": 7918,
                  "id": 1245,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "fun_checkInitializing": {
                  "entryPoint": 12088,
                  "id": 735,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "fun_checkOnERC1155BatchReceived": {
                  "entryPoint": 12324,
                  "id": 3380,
                  "parameterSlots": 6,
                  "returnSlots": 0
                },
                "fun_checkOnERC1155Received": {
                  "entryPoint": 12753,
                  "id": 3306,
                  "parameterSlots": 6,
                  "returnSlots": 0
                },
                "fun_checkRole": {
                  "entryPoint": 9528,
                  "id": 131,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "fun_functionDelegateCall": {
                  "entryPoint": 12988,
                  "id": 3558,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "fun_getRoleAdmin": {
                  "entryPoint": null,
                  "id": 173,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "fun_grantRole": {
                  "entryPoint": 9840,
                  "id": 317,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "fun_grantRole_11389": {
                  "entryPoint": 9662,
                  "id": 317,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "fun_initialize_inner": {
                  "entryPoint": 8800,
                  "id": null,
                  "parameterSlots": 3,
                  "returnSlots": 0
                },
                "fun_isApprovedForAll": {
                  "entryPoint": 9076,
                  "id": 1285,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "fun_revokeRole": {
                  "entryPoint": 10066,
                  "id": 363,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "fun_safeBatchTransferFrom": {
                  "entryPoint": 7670,
                  "id": 1375,
                  "parameterSlots": 5,
                  "returnSlots": 0
                },
                "fun_setURI": {
                  "entryPoint": 9147,
                  "id": 1759,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "fun_update": {
                  "entryPoint": 13212,
                  "id": 1539,
                  "parameterSlots": 4,
                  "returnSlots": 0
                },
                "fun_updateWithAcceptanceCheck": {
                  "entryPoint": 11311,
                  "id": 1619,
                  "parameterSlots": 5,
                  "returnSlots": 0
                },
                "fun_updateWithAcceptanceCheck_11332": {
                  "entryPoint": 10298,
                  "id": 1619,
                  "parameterSlots": 4,
                  "returnSlots": 0
                },
                "fun_updateWithAcceptanceCheck_11334": {
                  "entryPoint": 10796,
                  "id": 1619,
                  "parameterSlots": 4,
                  "returnSlots": 0
                },
                "fun_upgradeToAndCall": {
                  "entryPoint": 11804,
                  "id": 2851,
                  "parameterSlots": 2,
                  "returnSlots": 0
                },
                "fun_verifyCallResultFromTarget": {
                  "entryPoint": 13031,
                  "id": 3598,
                  "parameterSlots": 3,
                  "returnSlots": 1
                },
                "increment_uint256": {
                  "entryPoint": 8269,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "mapping_index_access_mapping_address_uint256_of_address": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "mapping_index_access_mapping_address_uint256_of_address_11344": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "mapping_index_access_mapping_uint256_mapping_address_uint256__of_uint256": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "mapping_index_access_mapping_uint256_mapping_address_uint256_of_uint256": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "memory_array_index_access_uint256_dyn": {
                  "entryPoint": 7851,
                  "id": null,
                  "parameterSlots": 2,
                  "returnSlots": 1
                },
                "panic_error_0x11": {
                  "entryPoint": 8222,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "panic_error_0x41": {
                  "entryPoint": 1088,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "require_helper_stringliteral_71ab": {
                  "entryPoint": 8121,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "require_helper_stringliteral_8a65": {
                  "entryPoint": 7508,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "update_storage_value_offsett_bool_to_bool": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "update_storage_value_offsett_bool_to_bool_11347": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "update_storage_value_offsett_uint256_to_uint256": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "update_storage_value_offsett_uint64_to_uint64": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 0,
                  "returnSlots": 0
                },
                "validator_revert_bytes4": {
                  "entryPoint": 733,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 0
                },
                "wrapping_div_uint256": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "wrapping_div_uint256_11312": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "wrapping_div_uint256_11313": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "wrapping_div_uint256_11315": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "wrapping_div_uint256_11316": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "wrapping_div_uint256_11317": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                },
                "wrapping_div_uint256_11318": {
                  "entryPoint": null,
                  "id": null,
                  "parameterSlots": 1,
                  "returnSlots": 1
                }
              },
              "generatedSources": [],
              "immutableReferences": {
                "847": [
                  {
                    "length": 32,
                    "start": 3691
                  },
                  {
                    "length": 32,
                    "start": 4210
                  }
                ]
              },
              "linkReferences": {},
              "object": "6080604052600436101561001257600080fd5b60003560e01c8062fdd58e1461022657806301ffc9a71461022157806302fe53051461021c57806306fdde03146102175780630e89341c1461021257806318160ddd1461020d578063248a9ca3146102085780632eb2c2d6146102035780632f2ff15d146101fe57806336568abe146101f95780633f4ba83a146101f45780634e1273f4146101ef5780634f1ef286146101ea5780634f558e79146101e557806352d1902d146101e057806356189236146101db5780635c975abb146101d65780636ac4d939146101d157806383ca4b6f146101cc5780638456cb59146101c757806391d14854146101c257806394bf804d146101bd57806395d89b41146101b8578063a217fddf146101b3578063a22cb465146101ae578063a6487c53146101a9578063ad3cb1cc146101a4578063b390c0ab1461019f578063bd85b0391461019a578063d539139314610195578063d547741f14610190578063e985e9c51461018b5763f242432a1461018657600080fd5b611c69565b611c05565b611ba6565b611b6b565b611b20565b6119c4565b611965565b6116b0565b6115b7565b61159b565b6114f3565b61143a565b6113c7565b6112d2565b61122e565b611122565b6110e0565b6110c2565b611057565b61100a565b610e2c565b610d6b565b610c34565b610bd5565b610b71565b610ae4565b610a1b565b6109de565b6107f3565b610716565b6104f8565b610307565b610270565b600435906001600160a01b038216820361024157565b600080fd5b602435906001600160a01b038216820361024157565b35906001600160a01b038216820361024157565b346102415760406003193601126102415760206102d461028e61022b565b6024356000527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c450083526040600020906001600160a01b0316600052602052604060002090565b54604051908152f35b7fffffffff0000000000000000000000000000000000000000000000000000000081160361024157565b34610241576020600319360112610241577fffffffff00000000000000000000000000000000000000000000000000000000600435610345816102dd565b167f0e08307600000000000000000000000000000000000000000000000000000000811490811561037f575b506040519015158152602090f35b7f7965db0b000000000000000000000000000000000000000000000000000000008114915081156103b2575b5038610371565b7fd9b67a2600000000000000000000000000000000000000000000000000000000811491508115610416575b81156103ec575b50386103ab565b7f01ffc9a700000000000000000000000000000000000000000000000000000000915014386103e5565b7f0e89341c00000000000000000000000000000000000000000000000000000000811491506103de565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f601f19910116810190811067ffffffffffffffff82111761049257604052565b610440565b67ffffffffffffffff811161049257601f01601f191660200190565b81601f82011215610241576020813591016104cd82610497565b926104db604051948561046f565b828452828201116102415781600092602092838601378301015290565b346102415760206003193601126102415760043567ffffffffffffffff81116102415761052c61056e9136906004016104b3565b3360009081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090206105699060ff905b5416611d54565b6123bb565b005b90600182811c921680156105b9575b602083101461058a57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f169161057f565b604051906000827f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c450254916105f683610570565b808352926001811690811561069b575060011461061c575b61061a9250038361046f565b565b507f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c4502600090815290917ff429cb5e2ec84cbb765e76b31964a56ccde03e7a6122d6cc4afb19edc55edeed5b81831061067f57505090602061061a9282010161060e565b6020919350806001915483858901015201910190918492610667565b6020925061061a94915060ff191682840152151560051b82010161060e565b60005b8381106106cd5750506000910152565b81810151838201526020016106bd565b90601f19601f6020936106fb815180928187528780880191016106ba565b0116010190565b9060206107139281815201906106dd565b90565b3461024157600060031936011261024157604051600060015461073881610570565b80845290600181169081156107cf5750600114610770575b61076c836107608185038261046f565b60405191829182610702565b0390f35b600160009081527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6939250905b8082106107b557509091508101602001610760610750565b91926001816020925483858801015201910190929161079d565b60ff191660208086019190915291151560051b840190910191506107609050610750565b346102415760206003193601126102415760043561080f6105c3565b81826000937a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008110156109b3575b50806d04ee2d6d415b85acef8100000000600a921015610997575b662386f26fc10000811015610982575b6305f5e100811015610970575b612710811015610960575b6064811015610951575b1015610946575b6108d660001960216108a060018701612511565b958601015b01917f3031323334353637383961626364656600000000000000000000000000000000600a82061a8353600a900490565b9081156108ea576108d690600019906108a5565b60405161076c906107608161093861090f89610909602085018b611ddf565b90611ddf565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000815260050190565b03601f19810183528261046f565b60019092019161088c565b60029060649004940193610885565b600490612710900494019361087b565b6008906305f5e1009004940193610870565b601090662386f26fc100009004940193610863565b6020906d04ee2d6d415b85acef81000000009004940193610853565b604094507a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000090049050600a610838565b346102415760006003193601126102415760207f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e280154604051908152f35b34610241576020600319360112610241576020610a676004356000527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260016040600020015490565b604051908152f35b67ffffffffffffffff81116104925760051b60200190565b9080601f83011215610241578135610a9e81610a6f565b92610aac604051948561046f565b81845260208085019260051b82010192831161024157602001905b828210610ad45750505090565b8135815260209182019101610ac7565b346102415760a060031936011261024157610afd61022b565b610b05610246565b9060443567ffffffffffffffff811161024157610b26903690600401610a87565b60643567ffffffffffffffff811161024157610b46903690600401610a87565b906084359367ffffffffffffffff851161024157610b6b61056e9536906004016104b3565b93611df6565b346102415760406003193601126102415761056e600435610b90610246565b90610bd0610bcb826000527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260016040600020015490565b612538565b612670565b3461024157604060031936011261024157600435610bf1610246565b336001600160a01b03821603610c0a5761056e91612752565b7f6697b2320000000000000000000000000000000000000000000000000000000060005260046000fd5b34610241576000600319360112610241573360009081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d60205260409020610c7f9060ff90610562565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff811615610cfc5760ff19167fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a1005b7f8dfc202b0000000000000000000000000000000000000000000000000000000060005260046000fd5b906020808351928381520192019060005b818110610d445750505090565b8251845260209384019390920191600101610d37565b906020610713928181520190610d26565b346102415760406003193601126102415760043567ffffffffffffffff8111610241573660238201121561024157806004013590610da882610a6f565b91610db6604051938461046f565b8083526024602084019160051b8301019136831161024157602401905b828210610e14578360243567ffffffffffffffff81116102415761076c91610e02610e08923690600401610a87565b90611eee565b60405191829182610d5a565b60208091610e218461025c565b815201910190610dd3565b604060031936011261024157610e4061022b565b60243567ffffffffffffffff811161024157610e609036906004016104b3565b906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016803014908115610fd5575b50610fab57604051917f52d1902d0000000000000000000000000000000000000000000000000000000083526020836004816001600160a01b0386165afa60009381610f7a575b50610f19577f4c9c8ce3000000000000000000000000000000000000000000000000000000006000526001600160a01b03821660045260246000fd5b907f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8303610f4b5761056e9250612e1c565b7faa1d49a400000000000000000000000000000000000000000000000000000000600052600483905260246000fd5b610f9d91945060203d602011610fa4575b610f95818361046f565b81019061282b565b9238610edd565b503d610f8b565b7fe07c8dba0000000000000000000000000000000000000000000000000000000060005260046000fd5b90506001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416141538610e96565b34610241576020600319360112610241576004356000527f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e280060205260206040600020541515604051908152f35b34610241576000600319360112610241576001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610fab5760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b34610241576000600319360112610241576020600054604051908152f35b3461024157600060031936011261024157602060ff7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330054166040519015158152f35b346102415760406003193601126102415760043567ffffffffffffffff811161024157611153903690600401610a87565b61115b610246565b906111668151611e7a565b3360009081527f549fe2656c81d2947b3b913f0a53b9ea86c71e049f3a1b8aa23c09a8a05cb8d4602052604090206111a39060ff905b5416611fb9565b60005b82518110156111d2576001906111bd60005461204d565b806000556111cb8285611eab565b52016111a6565b5090604051916111e360208461046f565b600083526001600160a01b038416156111ff5761056e9361283a565b7f57f447ce00000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b346102415760406003193601126102415760043567ffffffffffffffff81116102415761125f903690600401610a87565b60243567ffffffffffffffff81116102415761127f903690600401610a87565b9033156112a35761056e916040519161129960208461046f565b6000835233612a2c565b7f01a8351400000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b34610241576000600319360112610241573360009081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d6020526040902061131d9060ff90610562565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff811661139d5760ff1960019116177fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a1005b7fd93c06650000000000000000000000000000000000000000000000000000000060005260046000fd5b3461024157604060031936011261024157602060ff61142e6004356113ea610246565b906000527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680084526040600020906001600160a01b0316600052602052604060002090565b54166040519015158152f35b3461024157604060031936011261024157600435611456610246565b3360009081527f549fe2656c81d2947b3b913f0a53b9ea86c71e049f3a1b8aa23c09a8a05cb8d4602052604090206114909060ff9061119c565b61149b60005461204d565b9081600055604051916114af60208461046f565b600083526001600160a01b038216156111ff5761056e936114ed60405192600184526020840152604083019160018352606084015260808301604052565b9161283a565b3461024157600060031936011261024157604051600060025461151581610570565b80845290600181169081156107cf575060011461153c5761076c836107608185038261046f565b600260009081527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace939250905b80821061158157509091508101602001610760610750565b919260018160209254838588010152019101909291611569565b3461024157600060031936011261024157602060405160008152f35b34610241576040600319360112610241576115d061022b565b602435801515809103610241576001600160a01b038216918215611681576116469061162e336001600160a01b03166000527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c4501602052604060002090565b906001600160a01b0316600052602052604060002090565b60ff1981541660ff83161790556040519081527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3160203392a3005b7fced3e10000000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b346102415760606003193601126102415760043567ffffffffffffffff8111610241576116e19036906004016104b3565b60243567ffffffffffffffff8111610241576117019036906004016104b3565b9060443567ffffffffffffffff8111610241576117229036906004016104b3565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00549267ffffffffffffffff61176860ff604087901c16159567ffffffffffffffff1690565b168015908161195d575b6001149081611953575b15908161194a575b506119205761180592846117fc60017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000007ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005416177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b6118a557612260565b61180b57005b6118767fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a1005b61191b680100000000000000007fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005416177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b612260565b7ff92ee8a90000000000000000000000000000000000000000000000000000000060005260046000fd5b90501538611784565b303b15915061177c565b859150611772565b346102415760006003193601126102415761076c6040805190611988818361046f565b600582527f352e302e300000000000000000000000000000000000000000000000000000006020830152519182916020835260208301906106dd565b346102415760006040600319360112611b1d576024356004353315611af15790611a0b60405192600184526020840152604083019160018352606084015260808301604052565b9160209181604051611a1e60208261046f565b52600192839250611a32858360003361339c565b6000946000935b611a89575b61056e867f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e280154037f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e280155565b8251841015611aec578480968560059796971b90611adb8580848701015193880101516000527f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e2800602052604060002090565b828154039055019501939495611a39565b611a3e565b6024837f01a8351400000000000000000000000000000000000000000000000000000000815280600452fd5b80fd5b34610241576020600319360112610241576004356000527f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e28006020526020604060002054604051908152f35b346102415760006003193601126102415760206040517f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a68152f35b346102415760406003193601126102415761056e600435611bc5610246565b90611c00610bcb826000527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260016040600020015490565b612752565b3461024157604060031936011261024157602060ff61142e611c2561022b565b61162e611c30610246565b916001600160a01b03166000527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c4501602052604060002090565b346102415760a060031936011261024157611c8261022b565b611c8a610246565b604435906064359260843567ffffffffffffffff811161024157611cb29036906004016104b3565b926001600160a01b0382163381141580611d43575b611d12576001600160a01b038416156111ff57156112a35761056e94611d0a60405192600184526020840152604083019160018352606084015260808301604052565b929091612c2f565b7fe237d922000000000000000000000000000000000000000000000000000000006000523360045260245260446000fd5b50611d4e3384612374565b15611cc7565b15611d5b57565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f43616c6c6572206973206e6f7420616e2061646d696e20726f6c65206175746860448201527f6f726973656400000000000000000000000000000000000000000000000000006064820152fd5b90611df2602092828151948592016106ba565b0190565b939291906001600160a01b0385163381141580611e2f575b611d12576001600160a01b038216156111ff57156112a35761061a94612c2f565b5060ff611e723361162e896001600160a01b03166000527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c4501602052604060002090565b541615611e0e565b90611e8482610a6f565b611e91604051918261046f565b828152601f19611ea18294610a6f565b0190602036910137565b8051821015611ebf5760209160051b010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b91909180518351808203611f89575050611f088151611e7a565b9060005b8151811015611f825780611f7060019260051b602080828701015191890101516000527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c45006020526040600020906001600160a01b0316600052602052604060002090565b54611f7b8286611eab565b5201611f0c565b5090925050565b7f5b0599910000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b15611fc057565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f43616c6c6572206973206e6f742061206d696e746572000000000000000000006044820152fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600019811461205c5760010190565b61201e565b601f811161206d575050565b60016000526020600020906020601f840160051c830193106120aa575b601f0160051c01905b81811061209e575050565b60008155600101612093565b909150819061208a565b601f81116120c0575050565b7f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c45026000526020600020906020601f840160051c8301931061211c575b601f0160051c01905b818110612110575050565b60008155600101612105565b90915081906120fc565b601f821161213357505050565b6000526020600020906020601f840160051c8301931061216e575b601f0160051c01905b818110612162575050565b60008155600101612157565b909150819061214e565b90815167ffffffffffffffff8111610492576121a081612199600254610570565b6002612126565b602092601f82116001146121e1576121d1929382916000926121d6575b50506000198260011b9260031b1c19161790565b600255565b0151905038806121bd565b6002600052601f198216937f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace9160005b868110612248575083600195961061222f575b505050811b01600255565b015160001960f88460031b161c19169055388080612224565b91926020600181928685015181550194019201612211565b90916122769061226e612f38565b610569612f38565b61227e612f38565b612287336125be565b5080519067ffffffffffffffff8211610492576122ae826122a9600154610570565b612061565b602090601f83116001146122ea5791806122e29261061a95946000926121d65750506000198260011b9260031b1c19161790565b600155612178565b6001600052601f19831691907fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf69260005b81811061235c575091600193918561061a97969410612343575b505050811b01600155612178565b015160001960f88460031b161c19169055388080612335565b9293602060018192878601518155019501930161231b565b60ff9161162e6123b6926001600160a01b03166000527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c4501602052604060002090565b541690565b90815167ffffffffffffffff811161049257612400816123fb7f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c450254610570565b6120b4565b602092601f821160011461245457612430929382916000926121d65750506000198260011b9260031b1c19161790565b7f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c450255565b7f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c4502600052601f198216937ff429cb5e2ec84cbb765e76b31964a56ccde03e7a6122d6cc4afb19edc55edeed9160005b8681106124f957508360019596106124e0575b505050811b017f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c450255565b015160001960f88460031b161c191690553880806124b6565b919260206001819286850151815501940192016124a3565b9061251b82610497565b612528604051918261046f565b828152601f19611ea18294610497565b806000527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260ff612583336040600020906001600160a01b0316600052602052604060002090565b54161561258d5750565b7fe2517d3f000000000000000000000000000000000000000000000000000000006000523360045260245260446000fd5b6001600160a01b03811660009081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090205460ff1661266a576001600160a01b031660008181527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d60205260408120805460ff191660011790553391907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8180a4600190565b50600090565b806000527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260ff6126bb836040600020906001600160a01b0316600052602052604060002090565b541661274b57806000527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205261270a826040600020906001600160a01b0316600052602052604060002090565b600160ff198254161790556001600160a01b03339216907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d600080a4600190565b5050600090565b806000527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260ff61279d836040600020906001600160a01b0316600052602052604060002090565b54161561274b57806000527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526127ed826040600020906001600160a01b0316600052602052604060002090565b60ff1981541690556001600160a01b03339216907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b600080a4600190565b90816020910312610241575190565b9391909161284b828487600061339c565b600094855b84518710156128bd576128b56001918860051b906128a3602080848a010151938a0101516000527f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e2800602052604060002090565b6128ae8382546132da565b90556132da565b960195612850565b6129159195949296506128f1907f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e2801546132da565b7f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e280155565b6001600160a01b038416158061296c575b15612932575b50505050565b805160010361295b579060208061295295930151910151916000336131d1565b3880808061292c565b61296793600033613024565b612952565b9360009591936000965b85518810156129d5576001908860051b906129c6602080848a010151938a0101516000527f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e2800602052604060002090565b82815403905501970196612976565b612a2791959397509591957f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e280154037f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e280155565b612926565b90919392506001600160a01b0381161590818015612c27575b15612ba35784836000612a579361339c565b612b0f575b6000805b8251821015612abf576001908260051b90612ab0602080848a01015193870101516000527f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e2800602052604060002090565b82815403905501910190612a60565b91505061061a9192507f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e280154037f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e280155565b6000805b8251821015612b6e57612b666001918360051b906128a3602080848b01015193880101516000527f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e2800602052604060002090565b910190612b13565b612b9e91506128f1907f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e2801546132da565b612a5c565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4120536f756c626f756e6420746f6b656e2063616e6e6f74206265207472616e60448201527f73666572726564000000000000000000000000000000000000000000000000006064820152fd5b506001612a45565b919392906001600160a01b03831615808015612e0b575b15612ba357612c578387848761339c565b612d6f575b6001600160a01b0381161580612cb1575b15612c7a575b5050505050565b8451600103612ca057602080612c9696015192015192336131d1565b3880808080612c73565b612cac94919233613024565b612c96565b94936000939091845b8651861015612d19576001908660051b90612d0a602080848a010151938b0101516000527f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e2800602052604060002090565b82815403905501950194612cba565b612d6a919396979295507f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e280154037f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e280155565b612c6d565b9392600092835b8551851015612dd157612dc96001918660051b906128a3602080848a010151938b0101516000527f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e2800602052604060002090565b940193612d76565b612e069194506128f190969295967f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e2801546132da565b612c5c565b506001600160a01b03821615612c46565b90813b15612f01576001600160a01b038216807fffffffffffffffffffffffff00000000000000000000000000000000000000007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416177f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2805115612ece57612ecb916132bc565b50565b505034612ed757565b7fb398979f0000000000000000000000000000000000000000000000000000000060005260046000fd5b6001600160a01b03827f4c9c8ce3000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c1615612f6757565b7fd7e6bcf80000000000000000000000000000000000000000000000000000000060005260046000fd5b908160209103126102415751610713816102dd565b939061071395936001600160a01b03612fe69481612fd89416885216602087015260a0604087015260a0860190610d26565b908482036060860152610d26565b9160808184039101526106dd565b3d1561301f573d9061300582610497565b91613013604051938461046f565b82523d6000602084013e565b606090565b9091949293853b613038575b505050505050565b6020936130739160405196879586957fbc197c8100000000000000000000000000000000000000000000000000000000875260048701612fa6565b038160006001600160a01b0387165af16000918161316c575b506130e1575061309a612ff4565b80519190826130da577f57f447ce000000000000000000000000000000000000000000000000000000006000526001600160a01b03821660045260246000fd5b6020915001fd5b7fffffffff000000000000000000000000000000000000000000000000000000007fbc197c81000000000000000000000000000000000000000000000000000000009116036131365750388080808080613030565b7f57f447ce000000000000000000000000000000000000000000000000000000006000526001600160a01b031660045260246000fd5b61318f91925060203d602011613196575b613187818361046f565b810190612f91565b903861308c565b503d61317d565b91926001600160a01b0360a094816107139897941685521660208401526040830152606082015281608082015201906106dd565b9091949293853b6131e457505050505050565b60209361321f9160405196879586957ff23a6e610000000000000000000000000000000000000000000000000000000087526004870161319d565b038160006001600160a01b0387165af16000918161329b575b50613246575061309a612ff4565b7fffffffff000000000000000000000000000000000000000000000000000000007ff23a6e61000000000000000000000000000000000000000000000000000000009116036131365750388080808080613030565b6132b591925060203d60201161319657613187818361046f565b9038613238565b60008061071393602081519101845af46132d4612ff4565b916132e7565b9190820180921161205c57565b9061332657508051156132fc57602081519101fd5b7fd6bda2750000000000000000000000000000000000000000000000000000000060005260046000fd5b8151158061336e575b613337575090565b6001600160a01b03907f9996b315000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b50803b1561332f565b909161338e61071393604084526040840190610d26565b916020818403910152610d26565b9392918051835190818103611f8957505060005b815181101561351c578060051b9060208083850101519286010151846001600160a01b038916613442575b6001936001600160a01b0382166133f6575b505050016133b0565b6134389161162e613430926000527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c4500602052604060002090565b9182546132da565b90553884816133ed565b50909161347c8861162e836000527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c4500602052604060002090565b548281106134cc578291600194938792036134c48b61162e846000527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c4500602052604060002090565b5593506133db565b6040517f03dee4c50000000000000000000000000000000000000000000000000000000081526001600160a01b038a16600482015260248101919091526044810183905260648101829052608490fd5b50805193949391929160010361357f576020908101519181015160408051938452918301526001600160a01b03928316939092169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6291819081015b0390a4565b90916001600160a01b037f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb9161357a826040519384931697169533958361337756fea2646970667358221220f7addbc7d31946dddc83935807e49a26c237e7f18fdf8800dc17caa91da5606e64736f6c634300081b0033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH3 0xFDD58E EQ PUSH2 0x226 JUMPI DUP1 PUSH4 0x1FFC9A7 EQ PUSH2 0x221 JUMPI DUP1 PUSH4 0x2FE5305 EQ PUSH2 0x21C JUMPI DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x217 JUMPI DUP1 PUSH4 0xE89341C EQ PUSH2 0x212 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x20D JUMPI DUP1 PUSH4 0x248A9CA3 EQ PUSH2 0x208 JUMPI DUP1 PUSH4 0x2EB2C2D6 EQ PUSH2 0x203 JUMPI DUP1 PUSH4 0x2F2FF15D EQ PUSH2 0x1FE JUMPI DUP1 PUSH4 0x36568ABE EQ PUSH2 0x1F9 JUMPI DUP1 PUSH4 0x3F4BA83A EQ PUSH2 0x1F4 JUMPI DUP1 PUSH4 0x4E1273F4 EQ PUSH2 0x1EF JUMPI DUP1 PUSH4 0x4F1EF286 EQ PUSH2 0x1EA JUMPI DUP1 PUSH4 0x4F558E79 EQ PUSH2 0x1E5 JUMPI DUP1 PUSH4 0x52D1902D EQ PUSH2 0x1E0 JUMPI DUP1 PUSH4 0x56189236 EQ PUSH2 0x1DB JUMPI DUP1 PUSH4 0x5C975ABB EQ PUSH2 0x1D6 JUMPI DUP1 PUSH4 0x6AC4D939 EQ PUSH2 0x1D1 JUMPI DUP1 PUSH4 0x83CA4B6F EQ PUSH2 0x1CC JUMPI DUP1 PUSH4 0x8456CB59 EQ PUSH2 0x1C7 JUMPI DUP1 PUSH4 0x91D14854 EQ PUSH2 0x1C2 JUMPI DUP1 PUSH4 0x94BF804D EQ PUSH2 0x1BD JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x1B8 JUMPI DUP1 PUSH4 0xA217FDDF EQ PUSH2 0x1B3 JUMPI DUP1 PUSH4 0xA22CB465 EQ PUSH2 0x1AE JUMPI DUP1 PUSH4 0xA6487C53 EQ PUSH2 0x1A9 JUMPI DUP1 PUSH4 0xAD3CB1CC EQ PUSH2 0x1A4 JUMPI DUP1 PUSH4 0xB390C0AB EQ PUSH2 0x19F JUMPI DUP1 PUSH4 0xBD85B039 EQ PUSH2 0x19A JUMPI DUP1 PUSH4 0xD5391393 EQ PUSH2 0x195 JUMPI DUP1 PUSH4 0xD547741F EQ PUSH2 0x190 JUMPI DUP1 PUSH4 0xE985E9C5 EQ PUSH2 0x18B JUMPI PUSH4 0xF242432A EQ PUSH2 0x186 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1C69 JUMP JUMPDEST PUSH2 0x1C05 JUMP JUMPDEST PUSH2 0x1BA6 JUMP JUMPDEST PUSH2 0x1B6B JUMP JUMPDEST PUSH2 0x1B20 JUMP JUMPDEST PUSH2 0x19C4 JUMP JUMPDEST PUSH2 0x1965 JUMP JUMPDEST PUSH2 0x16B0 JUMP JUMPDEST PUSH2 0x15B7 JUMP JUMPDEST PUSH2 0x159B JUMP JUMPDEST PUSH2 0x14F3 JUMP JUMPDEST PUSH2 0x143A JUMP JUMPDEST PUSH2 0x13C7 JUMP JUMPDEST PUSH2 0x12D2 JUMP JUMPDEST PUSH2 0x122E JUMP JUMPDEST PUSH2 0x1122 JUMP JUMPDEST PUSH2 0x10E0 JUMP JUMPDEST PUSH2 0x10C2 JUMP JUMPDEST PUSH2 0x1057 JUMP JUMPDEST PUSH2 0x100A JUMP JUMPDEST PUSH2 0xE2C JUMP JUMPDEST PUSH2 0xD6B JUMP JUMPDEST PUSH2 0xC34 JUMP JUMPDEST PUSH2 0xBD5 JUMP JUMPDEST PUSH2 0xB71 JUMP JUMPDEST PUSH2 0xAE4 JUMP JUMPDEST PUSH2 0xA1B JUMP JUMPDEST PUSH2 0x9DE JUMP JUMPDEST PUSH2 0x7F3 JUMP JUMPDEST PUSH2 0x716 JUMP JUMPDEST PUSH2 0x4F8 JUMP JUMPDEST PUSH2 0x307 JUMP JUMPDEST PUSH2 0x270 JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x241 JUMPI JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x241 JUMPI JUMP JUMPDEST CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x241 JUMPI JUMP JUMPDEST CALLVALUE PUSH2 0x241 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI PUSH1 0x20 PUSH2 0x2D4 PUSH2 0x28E PUSH2 0x22B JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH1 0x0 MSTORE PUSH32 0x88BE536D5240C274A3B1D3A1BE54482FD9CAA294F08C62A7CDE569F49A3C4500 DUP4 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND SUB PUSH2 0x241 JUMPI JUMP JUMPDEST CALLVALUE PUSH2 0x241 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x4 CALLDATALOAD PUSH2 0x345 DUP2 PUSH2 0x2DD JUMP JUMPDEST AND PUSH32 0xE08307600000000000000000000000000000000000000000000000000000000 DUP2 EQ SWAP1 DUP2 ISZERO PUSH2 0x37F JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 SWAP1 RETURN JUMPDEST PUSH32 0x7965DB0B00000000000000000000000000000000000000000000000000000000 DUP2 EQ SWAP2 POP DUP2 ISZERO PUSH2 0x3B2 JUMPI JUMPDEST POP CODESIZE PUSH2 0x371 JUMP JUMPDEST PUSH32 0xD9B67A2600000000000000000000000000000000000000000000000000000000 DUP2 EQ SWAP2 POP DUP2 ISZERO PUSH2 0x416 JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x3EC JUMPI JUMPDEST POP CODESIZE PUSH2 0x3AB JUMP JUMPDEST PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 SWAP2 POP EQ CODESIZE PUSH2 0x3E5 JUMP JUMPDEST PUSH32 0xE89341C00000000000000000000000000000000000000000000000000000000 DUP2 EQ SWAP2 POP PUSH2 0x3DE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x492 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH2 0x440 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x492 JUMPI PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x241 JUMPI PUSH1 0x20 DUP2 CALLDATALOAD SWAP2 ADD PUSH2 0x4CD DUP3 PUSH2 0x497 JUMP JUMPDEST SWAP3 PUSH2 0x4DB PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x46F JUMP JUMPDEST DUP3 DUP5 MSTORE DUP3 DUP3 ADD GT PUSH2 0x241 JUMPI DUP2 PUSH1 0x0 SWAP3 PUSH1 0x20 SWAP3 DUP4 DUP7 ADD CALLDATACOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST CALLVALUE PUSH2 0x241 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x241 JUMPI PUSH2 0x52C PUSH2 0x56E SWAP2 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x4B3 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0xB7DB2DD08FCB62D0C9E08C51941CAE53C267786A0B75803FB7960902FC8EF97D PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x569 SWAP1 PUSH1 0xFF SWAP1 JUMPDEST SLOAD AND PUSH2 0x1D54 JUMP JUMPDEST PUSH2 0x23BB JUMP JUMPDEST STOP JUMPDEST SWAP1 PUSH1 0x1 DUP3 DUP2 SHR SWAP3 AND DUP1 ISZERO PUSH2 0x5B9 JUMPI JUMPDEST PUSH1 0x20 DUP4 LT EQ PUSH2 0x58A JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP2 PUSH1 0x7F AND SWAP2 PUSH2 0x57F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH1 0x0 DUP3 PUSH32 0x88BE536D5240C274A3B1D3A1BE54482FD9CAA294F08C62A7CDE569F49A3C4502 SLOAD SWAP2 PUSH2 0x5F6 DUP4 PUSH2 0x570 JUMP JUMPDEST DUP1 DUP4 MSTORE SWAP3 PUSH1 0x1 DUP2 AND SWAP1 DUP2 ISZERO PUSH2 0x69B JUMPI POP PUSH1 0x1 EQ PUSH2 0x61C JUMPI JUMPDEST PUSH2 0x61A SWAP3 POP SUB DUP4 PUSH2 0x46F JUMP JUMPDEST JUMP JUMPDEST POP PUSH32 0x88BE536D5240C274A3B1D3A1BE54482FD9CAA294F08C62A7CDE569F49A3C4502 PUSH1 0x0 SWAP1 DUP2 MSTORE SWAP1 SWAP2 PUSH32 0xF429CB5E2EC84CBB765E76B31964A56CCDE03E7A6122D6CC4AFB19EDC55EDEED JUMPDEST DUP2 DUP4 LT PUSH2 0x67F JUMPI POP POP SWAP1 PUSH1 0x20 PUSH2 0x61A SWAP3 DUP3 ADD ADD PUSH2 0x60E JUMP JUMPDEST PUSH1 0x20 SWAP2 SWAP4 POP DUP1 PUSH1 0x1 SWAP2 SLOAD DUP4 DUP6 DUP10 ADD ADD MSTORE ADD SWAP2 ADD SWAP1 SWAP2 DUP5 SWAP3 PUSH2 0x667 JUMP JUMPDEST PUSH1 0x20 SWAP3 POP PUSH2 0x61A SWAP5 SWAP2 POP PUSH1 0xFF NOT AND DUP3 DUP5 ADD MSTORE ISZERO ISZERO PUSH1 0x5 SHL DUP3 ADD ADD PUSH2 0x60E JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT PUSH2 0x6CD JUMPI POP POP PUSH1 0x0 SWAP2 ADD MSTORE JUMP JUMPDEST DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x6BD JUMP JUMPDEST SWAP1 PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 SWAP4 PUSH2 0x6FB DUP2 MLOAD DUP1 SWAP3 DUP2 DUP8 MSTORE DUP8 DUP1 DUP9 ADD SWAP2 ADD PUSH2 0x6BA JUMP JUMPDEST ADD AND ADD ADD SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x20 PUSH2 0x713 SWAP3 DUP2 DUP2 MSTORE ADD SWAP1 PUSH2 0x6DD JUMP JUMPDEST SWAP1 JUMP JUMPDEST CALLVALUE PUSH2 0x241 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI PUSH1 0x40 MLOAD PUSH1 0x0 PUSH1 0x1 SLOAD PUSH2 0x738 DUP2 PUSH2 0x570 JUMP JUMPDEST DUP1 DUP5 MSTORE SWAP1 PUSH1 0x1 DUP2 AND SWAP1 DUP2 ISZERO PUSH2 0x7CF JUMPI POP PUSH1 0x1 EQ PUSH2 0x770 JUMPI JUMPDEST PUSH2 0x76C DUP4 PUSH2 0x760 DUP2 DUP6 SUB DUP3 PUSH2 0x46F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0x702 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST PUSH1 0x1 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0xB10E2D527612073B26EECDFD717E6A320CF44B4AFAC2B0732D9FCBE2B7FA0CF6 SWAP4 SWAP3 POP SWAP1 JUMPDEST DUP1 DUP3 LT PUSH2 0x7B5 JUMPI POP SWAP1 SWAP2 POP DUP2 ADD PUSH1 0x20 ADD PUSH2 0x760 PUSH2 0x750 JUMP JUMPDEST SWAP2 SWAP3 PUSH1 0x1 DUP2 PUSH1 0x20 SWAP3 SLOAD DUP4 DUP6 DUP9 ADD ADD MSTORE ADD SWAP2 ADD SWAP1 SWAP3 SWAP2 PUSH2 0x79D JUMP JUMPDEST PUSH1 0xFF NOT AND PUSH1 0x20 DUP1 DUP7 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 ISZERO ISZERO PUSH1 0x5 SHL DUP5 ADD SWAP1 SWAP2 ADD SWAP2 POP PUSH2 0x760 SWAP1 POP PUSH2 0x750 JUMP JUMPDEST CALLVALUE PUSH2 0x241 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x80F PUSH2 0x5C3 JUMP JUMPDEST DUP2 DUP3 PUSH1 0x0 SWAP4 PUSH27 0x184F03E93FF9F4DAA797ED6E38ED64BF6A1F010000000000000000 DUP2 LT ISZERO PUSH2 0x9B3 JUMPI JUMPDEST POP DUP1 PUSH14 0x4EE2D6D415B85ACEF8100000000 PUSH1 0xA SWAP3 LT ISZERO PUSH2 0x997 JUMPI JUMPDEST PUSH7 0x2386F26FC10000 DUP2 LT ISZERO PUSH2 0x982 JUMPI JUMPDEST PUSH4 0x5F5E100 DUP2 LT ISZERO PUSH2 0x970 JUMPI JUMPDEST PUSH2 0x2710 DUP2 LT ISZERO PUSH2 0x960 JUMPI JUMPDEST PUSH1 0x64 DUP2 LT ISZERO PUSH2 0x951 JUMPI JUMPDEST LT ISZERO PUSH2 0x946 JUMPI JUMPDEST PUSH2 0x8D6 PUSH1 0x0 NOT PUSH1 0x21 PUSH2 0x8A0 PUSH1 0x1 DUP8 ADD PUSH2 0x2511 JUMP JUMPDEST SWAP6 DUP7 ADD ADD JUMPDEST ADD SWAP2 PUSH32 0x3031323334353637383961626364656600000000000000000000000000000000 PUSH1 0xA DUP3 MOD BYTE DUP4 MSTORE8 PUSH1 0xA SWAP1 DIV SWAP1 JUMP JUMPDEST SWAP1 DUP2 ISZERO PUSH2 0x8EA JUMPI PUSH2 0x8D6 SWAP1 PUSH1 0x0 NOT SWAP1 PUSH2 0x8A5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x76C SWAP1 PUSH2 0x760 DUP2 PUSH2 0x938 PUSH2 0x90F DUP10 PUSH2 0x909 PUSH1 0x20 DUP6 ADD DUP12 PUSH2 0x1DDF JUMP JUMPDEST SWAP1 PUSH2 0x1DDF JUMP JUMPDEST PUSH32 0x2E6A736F6E000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x5 ADD SWAP1 JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP4 MSTORE DUP3 PUSH2 0x46F JUMP JUMPDEST PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 PUSH2 0x88C JUMP JUMPDEST PUSH1 0x2 SWAP1 PUSH1 0x64 SWAP1 DIV SWAP5 ADD SWAP4 PUSH2 0x885 JUMP JUMPDEST PUSH1 0x4 SWAP1 PUSH2 0x2710 SWAP1 DIV SWAP5 ADD SWAP4 PUSH2 0x87B JUMP JUMPDEST PUSH1 0x8 SWAP1 PUSH4 0x5F5E100 SWAP1 DIV SWAP5 ADD SWAP4 PUSH2 0x870 JUMP JUMPDEST PUSH1 0x10 SWAP1 PUSH7 0x2386F26FC10000 SWAP1 DIV SWAP5 ADD SWAP4 PUSH2 0x863 JUMP JUMPDEST PUSH1 0x20 SWAP1 PUSH14 0x4EE2D6D415B85ACEF8100000000 SWAP1 DIV SWAP5 ADD SWAP4 PUSH2 0x853 JUMP JUMPDEST PUSH1 0x40 SWAP5 POP PUSH27 0x184F03E93FF9F4DAA797ED6E38ED64BF6A1F010000000000000000 SWAP1 DIV SWAP1 POP PUSH1 0xA PUSH2 0x838 JUMP JUMPDEST CALLVALUE PUSH2 0x241 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI PUSH1 0x20 PUSH32 0x4A593662EE04D27B6A00EBB31BE7FE0C102C2ADE82A7C5D764F2DF05DC4E2801 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x241 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI PUSH1 0x20 PUSH2 0xA67 PUSH1 0x4 CALLDATALOAD PUSH1 0x0 MSTORE PUSH32 0x2DD7BC7DEC4DCEEDDA775E58DD541E08A116C6C53815C0BD028192F7B626800 PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x40 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x492 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x241 JUMPI DUP2 CALLDATALOAD PUSH2 0xA9E DUP2 PUSH2 0xA6F JUMP JUMPDEST SWAP3 PUSH2 0xAAC PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x46F JUMP JUMPDEST DUP2 DUP5 MSTORE PUSH1 0x20 DUP1 DUP6 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x241 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0xAD4 JUMPI POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD DUP2 MSTORE PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0xAC7 JUMP JUMPDEST CALLVALUE PUSH2 0x241 JUMPI PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI PUSH2 0xAFD PUSH2 0x22B JUMP JUMPDEST PUSH2 0xB05 PUSH2 0x246 JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x241 JUMPI PUSH2 0xB26 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xA87 JUMP JUMPDEST PUSH1 0x64 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x241 JUMPI PUSH2 0xB46 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xA87 JUMP JUMPDEST SWAP1 PUSH1 0x84 CALLDATALOAD SWAP4 PUSH8 0xFFFFFFFFFFFFFFFF DUP6 GT PUSH2 0x241 JUMPI PUSH2 0xB6B PUSH2 0x56E SWAP6 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x4B3 JUMP JUMPDEST SWAP4 PUSH2 0x1DF6 JUMP JUMPDEST CALLVALUE PUSH2 0x241 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI PUSH2 0x56E PUSH1 0x4 CALLDATALOAD PUSH2 0xB90 PUSH2 0x246 JUMP JUMPDEST SWAP1 PUSH2 0xBD0 PUSH2 0xBCB DUP3 PUSH1 0x0 MSTORE PUSH32 0x2DD7BC7DEC4DCEEDDA775E58DD541E08A116C6C53815C0BD028192F7B626800 PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x40 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x2538 JUMP JUMPDEST PUSH2 0x2670 JUMP JUMPDEST CALLVALUE PUSH2 0x241 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0xBF1 PUSH2 0x246 JUMP JUMPDEST CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SUB PUSH2 0xC0A JUMPI PUSH2 0x56E SWAP2 PUSH2 0x2752 JUMP JUMPDEST PUSH32 0x6697B23200000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x0 REVERT JUMPDEST CALLVALUE PUSH2 0x241 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0xB7DB2DD08FCB62D0C9E08C51941CAE53C267786A0B75803FB7960902FC8EF97D PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0xC7F SWAP1 PUSH1 0xFF SWAP1 PUSH2 0x562 JUMP JUMPDEST PUSH32 0xCD5ED15C6E187E77E9AEE88184C21F4F2182AB5827CB3B7E07FBEDCD63F03300 SLOAD PUSH1 0xFF DUP2 AND ISZERO PUSH2 0xCFC JUMPI PUSH1 0xFF NOT AND PUSH32 0xCD5ED15C6E187E77E9AEE88184C21F4F2182AB5827CB3B7E07FBEDCD63F03300 SSTORE PUSH32 0x5DB9EE0A495BF2E6FF9C91A7834C1BA4FDD244A5E8AA4E537BD38AEAE4B073AA PUSH1 0x20 PUSH1 0x40 MLOAD CALLER DUP2 MSTORE LOG1 STOP JUMPDEST PUSH32 0x8DFC202B00000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x0 REVERT JUMPDEST SWAP1 PUSH1 0x20 DUP1 DUP4 MLOAD SWAP3 DUP4 DUP2 MSTORE ADD SWAP3 ADD SWAP1 PUSH1 0x0 JUMPDEST DUP2 DUP2 LT PUSH2 0xD44 JUMPI POP POP POP SWAP1 JUMP JUMPDEST DUP3 MLOAD DUP5 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0xD37 JUMP JUMPDEST SWAP1 PUSH1 0x20 PUSH2 0x713 SWAP3 DUP2 DUP2 MSTORE ADD SWAP1 PUSH2 0xD26 JUMP JUMPDEST CALLVALUE PUSH2 0x241 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x241 JUMPI CALLDATASIZE PUSH1 0x23 DUP3 ADD SLT ISZERO PUSH2 0x241 JUMPI DUP1 PUSH1 0x4 ADD CALLDATALOAD SWAP1 PUSH2 0xDA8 DUP3 PUSH2 0xA6F JUMP JUMPDEST SWAP2 PUSH2 0xDB6 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x46F JUMP JUMPDEST DUP1 DUP4 MSTORE PUSH1 0x24 PUSH1 0x20 DUP5 ADD SWAP2 PUSH1 0x5 SHL DUP4 ADD ADD SWAP2 CALLDATASIZE DUP4 GT PUSH2 0x241 JUMPI PUSH1 0x24 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0xE14 JUMPI DUP4 PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x241 JUMPI PUSH2 0x76C SWAP2 PUSH2 0xE02 PUSH2 0xE08 SWAP3 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xA87 JUMP JUMPDEST SWAP1 PUSH2 0x1EEE JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0xD5A JUMP JUMPDEST PUSH1 0x20 DUP1 SWAP2 PUSH2 0xE21 DUP5 PUSH2 0x25C JUMP JUMPDEST DUP2 MSTORE ADD SWAP2 ADD SWAP1 PUSH2 0xDD3 JUMP JUMPDEST PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI PUSH2 0xE40 PUSH2 0x22B JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x241 JUMPI PUSH2 0xE60 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x4B3 JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP1 ADDRESS EQ SWAP1 DUP2 ISZERO PUSH2 0xFD5 JUMPI JUMPDEST POP PUSH2 0xFAB JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH32 0x52D1902D00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x20 DUP4 PUSH1 0x4 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND GAS STATICCALL PUSH1 0x0 SWAP4 DUP2 PUSH2 0xF7A JUMPI JUMPDEST POP PUSH2 0xF19 JUMPI PUSH32 0x4C9C8CE300000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP1 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC DUP4 SUB PUSH2 0xF4B JUMPI PUSH2 0x56E SWAP3 POP PUSH2 0x2E1C JUMP JUMPDEST PUSH32 0xAA1D49A400000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x4 DUP4 SWAP1 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0xF9D SWAP2 SWAP5 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xFA4 JUMPI JUMPDEST PUSH2 0xF95 DUP2 DUP4 PUSH2 0x46F JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x282B JUMP JUMPDEST SWAP3 CODESIZE PUSH2 0xEDD JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xF8B JUMP JUMPDEST PUSH32 0xE07C8DBA00000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x0 REVERT JUMPDEST SWAP1 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD AND EQ ISZERO CODESIZE PUSH2 0xE96 JUMP JUMPDEST CALLVALUE PUSH2 0x241 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI PUSH1 0x4 CALLDATALOAD PUSH1 0x0 MSTORE PUSH32 0x4A593662EE04D27B6A00EBB31BE7FE0C102C2ADE82A7C5D764F2DF05DC4E2800 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH1 0x0 KECCAK256 SLOAD ISZERO ISZERO PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x241 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND ADDRESS SUB PUSH2 0xFAB JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x241 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI PUSH1 0x20 PUSH1 0x0 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x241 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI PUSH1 0x20 PUSH1 0xFF PUSH32 0xCD5ED15C6E187E77E9AEE88184C21F4F2182AB5827CB3B7E07FBEDCD63F03300 SLOAD AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x241 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x241 JUMPI PUSH2 0x1153 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xA87 JUMP JUMPDEST PUSH2 0x115B PUSH2 0x246 JUMP JUMPDEST SWAP1 PUSH2 0x1166 DUP2 MLOAD PUSH2 0x1E7A JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0x549FE2656C81D2947B3B913F0A53B9EA86C71E049F3A1B8AA23C09A8A05CB8D4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x11A3 SWAP1 PUSH1 0xFF SWAP1 JUMPDEST SLOAD AND PUSH2 0x1FB9 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x11D2 JUMPI PUSH1 0x1 SWAP1 PUSH2 0x11BD PUSH1 0x0 SLOAD PUSH2 0x204D JUMP JUMPDEST DUP1 PUSH1 0x0 SSTORE PUSH2 0x11CB DUP3 DUP6 PUSH2 0x1EAB JUMP JUMPDEST MSTORE ADD PUSH2 0x11A6 JUMP JUMPDEST POP SWAP1 PUSH1 0x40 MLOAD SWAP2 PUSH2 0x11E3 PUSH1 0x20 DUP5 PUSH2 0x46F JUMP JUMPDEST PUSH1 0x0 DUP4 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND ISZERO PUSH2 0x11FF JUMPI PUSH2 0x56E SWAP4 PUSH2 0x283A JUMP JUMPDEST PUSH32 0x57F447CE00000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST CALLVALUE PUSH2 0x241 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x241 JUMPI PUSH2 0x125F SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xA87 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x241 JUMPI PUSH2 0x127F SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xA87 JUMP JUMPDEST SWAP1 CALLER ISZERO PUSH2 0x12A3 JUMPI PUSH2 0x56E SWAP2 PUSH1 0x40 MLOAD SWAP2 PUSH2 0x1299 PUSH1 0x20 DUP5 PUSH2 0x46F JUMP JUMPDEST PUSH1 0x0 DUP4 MSTORE CALLER PUSH2 0x2A2C JUMP JUMPDEST PUSH32 0x1A8351400000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST CALLVALUE PUSH2 0x241 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0xB7DB2DD08FCB62D0C9E08C51941CAE53C267786A0B75803FB7960902FC8EF97D PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x131D SWAP1 PUSH1 0xFF SWAP1 PUSH2 0x562 JUMP JUMPDEST PUSH32 0xCD5ED15C6E187E77E9AEE88184C21F4F2182AB5827CB3B7E07FBEDCD63F03300 SLOAD PUSH1 0xFF DUP2 AND PUSH2 0x139D JUMPI PUSH1 0xFF NOT PUSH1 0x1 SWAP2 AND OR PUSH32 0xCD5ED15C6E187E77E9AEE88184C21F4F2182AB5827CB3B7E07FBEDCD63F03300 SSTORE PUSH32 0x62E78CEA01BEE320CD4E420270B5EA74000D11B0C9F74754EBDBFC544B05A258 PUSH1 0x20 PUSH1 0x40 MLOAD CALLER DUP2 MSTORE LOG1 STOP JUMPDEST PUSH32 0xD93C066500000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x0 REVERT JUMPDEST CALLVALUE PUSH2 0x241 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI PUSH1 0x20 PUSH1 0xFF PUSH2 0x142E PUSH1 0x4 CALLDATALOAD PUSH2 0x13EA PUSH2 0x246 JUMP JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH32 0x2DD7BC7DEC4DCEEDDA775E58DD541E08A116C6C53815C0BD028192F7B626800 DUP5 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x241 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x1456 PUSH2 0x246 JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0x549FE2656C81D2947B3B913F0A53B9EA86C71E049F3A1B8AA23C09A8A05CB8D4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH2 0x1490 SWAP1 PUSH1 0xFF SWAP1 PUSH2 0x119C JUMP JUMPDEST PUSH2 0x149B PUSH1 0x0 SLOAD PUSH2 0x204D JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x0 SSTORE PUSH1 0x40 MLOAD SWAP2 PUSH2 0x14AF PUSH1 0x20 DUP5 PUSH2 0x46F JUMP JUMPDEST PUSH1 0x0 DUP4 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ISZERO PUSH2 0x11FF JUMPI PUSH2 0x56E SWAP4 PUSH2 0x14ED PUSH1 0x40 MLOAD SWAP3 PUSH1 0x1 DUP5 MSTORE PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD SWAP2 PUSH1 0x1 DUP4 MSTORE PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP2 PUSH2 0x283A JUMP JUMPDEST CALLVALUE PUSH2 0x241 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI PUSH1 0x40 MLOAD PUSH1 0x0 PUSH1 0x2 SLOAD PUSH2 0x1515 DUP2 PUSH2 0x570 JUMP JUMPDEST DUP1 DUP5 MSTORE SWAP1 PUSH1 0x1 DUP2 AND SWAP1 DUP2 ISZERO PUSH2 0x7CF JUMPI POP PUSH1 0x1 EQ PUSH2 0x153C JUMPI PUSH2 0x76C DUP4 PUSH2 0x760 DUP2 DUP6 SUB DUP3 PUSH2 0x46F JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0x405787FA12A823E0F2B7631CC41B3BA8828B3321CA811111FA75CD3AA3BB5ACE SWAP4 SWAP3 POP SWAP1 JUMPDEST DUP1 DUP3 LT PUSH2 0x1581 JUMPI POP SWAP1 SWAP2 POP DUP2 ADD PUSH1 0x20 ADD PUSH2 0x760 PUSH2 0x750 JUMP JUMPDEST SWAP2 SWAP3 PUSH1 0x1 DUP2 PUSH1 0x20 SWAP3 SLOAD DUP4 DUP6 DUP9 ADD ADD MSTORE ADD SWAP2 ADD SWAP1 SWAP3 SWAP2 PUSH2 0x1569 JUMP JUMPDEST CALLVALUE PUSH2 0x241 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x0 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x241 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI PUSH2 0x15D0 PUSH2 0x22B JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD DUP1 ISZERO ISZERO DUP1 SWAP2 SUB PUSH2 0x241 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP2 DUP3 ISZERO PUSH2 0x1681 JUMPI PUSH2 0x1646 SWAP1 PUSH2 0x162E CALLER PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 MSTORE PUSH32 0x88BE536D5240C274A3B1D3A1BE54482FD9CAA294F08C62A7CDE569F49A3C4501 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP1 JUMP JUMPDEST PUSH1 0xFF NOT DUP2 SLOAD AND PUSH1 0xFF DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0x17307EAB39AB6107E8899845AD3D59BD9653F200F220920489CA2B5937696C31 PUSH1 0x20 CALLER SWAP3 LOG3 STOP JUMPDEST PUSH32 0xCED3E10000000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST CALLVALUE PUSH2 0x241 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x241 JUMPI PUSH2 0x16E1 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x4B3 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x241 JUMPI PUSH2 0x1701 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x4B3 JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x241 JUMPI PUSH2 0x1722 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x4B3 JUMP JUMPDEST PUSH32 0xF0C57E16840DF040F15088DC2F81FE391C3923BEC73E23A9662EFC9C229C6A00 SLOAD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF PUSH2 0x1768 PUSH1 0xFF PUSH1 0x40 DUP8 SWAP1 SHR AND ISZERO SWAP6 PUSH8 0xFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST AND DUP1 ISZERO SWAP1 DUP2 PUSH2 0x195D JUMPI JUMPDEST PUSH1 0x1 EQ SWAP1 DUP2 PUSH2 0x1953 JUMPI JUMPDEST ISZERO SWAP1 DUP2 PUSH2 0x194A JUMPI JUMPDEST POP PUSH2 0x1920 JUMPI PUSH2 0x1805 SWAP3 DUP5 PUSH2 0x17FC PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000 PUSH32 0xF0C57E16840DF040F15088DC2F81FE391C3923BEC73E23A9662EFC9C229C6A00 SLOAD AND OR PUSH32 0xF0C57E16840DF040F15088DC2F81FE391C3923BEC73E23A9662EFC9C229C6A00 SSTORE JUMP JUMPDEST PUSH2 0x18A5 JUMPI PUSH2 0x2260 JUMP JUMPDEST PUSH2 0x180B JUMPI STOP JUMPDEST PUSH2 0x1876 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFF PUSH32 0xF0C57E16840DF040F15088DC2F81FE391C3923BEC73E23A9662EFC9C229C6A00 SLOAD AND PUSH32 0xF0C57E16840DF040F15088DC2F81FE391C3923BEC73E23A9662EFC9C229C6A00 SSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE PUSH32 0xC7F505B2F371AE2175EE4913F4499E1F2633A7B5936321EED1CDAEB6115181D2 SWAP1 PUSH1 0x20 SWAP1 LOG1 STOP JUMPDEST PUSH2 0x191B PUSH9 0x10000000000000000 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFF PUSH32 0xF0C57E16840DF040F15088DC2F81FE391C3923BEC73E23A9662EFC9C229C6A00 SLOAD AND OR PUSH32 0xF0C57E16840DF040F15088DC2F81FE391C3923BEC73E23A9662EFC9C229C6A00 SSTORE JUMP JUMPDEST PUSH2 0x2260 JUMP JUMPDEST PUSH32 0xF92EE8A900000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x0 REVERT JUMPDEST SWAP1 POP ISZERO CODESIZE PUSH2 0x1784 JUMP JUMPDEST ADDRESS EXTCODESIZE ISZERO SWAP2 POP PUSH2 0x177C JUMP JUMPDEST DUP6 SWAP2 POP PUSH2 0x1772 JUMP JUMPDEST CALLVALUE PUSH2 0x241 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI PUSH2 0x76C PUSH1 0x40 DUP1 MLOAD SWAP1 PUSH2 0x1988 DUP2 DUP4 PUSH2 0x46F JUMP JUMPDEST PUSH1 0x5 DUP3 MSTORE PUSH32 0x352E302E30000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP4 ADD MSTORE MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x6DD JUMP JUMPDEST CALLVALUE PUSH2 0x241 JUMPI PUSH1 0x0 PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1B1D JUMPI PUSH1 0x24 CALLDATALOAD PUSH1 0x4 CALLDATALOAD CALLER ISZERO PUSH2 0x1AF1 JUMPI SWAP1 PUSH2 0x1A0B PUSH1 0x40 MLOAD SWAP3 PUSH1 0x1 DUP5 MSTORE PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD SWAP2 PUSH1 0x1 DUP4 MSTORE PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP2 PUSH1 0x20 SWAP2 DUP2 PUSH1 0x40 MLOAD PUSH2 0x1A1E PUSH1 0x20 DUP3 PUSH2 0x46F JUMP JUMPDEST MSTORE PUSH1 0x1 SWAP3 DUP4 SWAP3 POP PUSH2 0x1A32 DUP6 DUP4 PUSH1 0x0 CALLER PUSH2 0x339C JUMP JUMPDEST PUSH1 0x0 SWAP5 PUSH1 0x0 SWAP4 JUMPDEST PUSH2 0x1A89 JUMPI JUMPDEST PUSH2 0x56E DUP7 PUSH32 0x4A593662EE04D27B6A00EBB31BE7FE0C102C2ADE82A7C5D764F2DF05DC4E2801 SLOAD SUB PUSH32 0x4A593662EE04D27B6A00EBB31BE7FE0C102C2ADE82A7C5D764F2DF05DC4E2801 SSTORE JUMP JUMPDEST DUP3 MLOAD DUP5 LT ISZERO PUSH2 0x1AEC JUMPI DUP5 DUP1 SWAP7 DUP6 PUSH1 0x5 SWAP8 SWAP7 SWAP8 SHL SWAP1 PUSH2 0x1ADB DUP6 DUP1 DUP5 DUP8 ADD ADD MLOAD SWAP4 DUP9 ADD ADD MLOAD PUSH1 0x0 MSTORE PUSH32 0x4A593662EE04D27B6A00EBB31BE7FE0C102C2ADE82A7C5D764F2DF05DC4E2800 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP1 JUMP JUMPDEST DUP3 DUP2 SLOAD SUB SWAP1 SSTORE ADD SWAP6 ADD SWAP4 SWAP5 SWAP6 PUSH2 0x1A39 JUMP JUMPDEST PUSH2 0x1A3E JUMP JUMPDEST PUSH1 0x24 DUP4 PUSH32 0x1A8351400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP1 PUSH1 0x4 MSTORE REVERT JUMPDEST DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x241 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI PUSH1 0x4 CALLDATALOAD PUSH1 0x0 MSTORE PUSH32 0x4A593662EE04D27B6A00EBB31BE7FE0C102C2ADE82A7C5D764F2DF05DC4E2800 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH1 0x0 KECCAK256 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x241 JUMPI PUSH1 0x0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH32 0x9F2DF0FED2C77648DE5860A4CC508CD0818C85B8B8A1AB4CEEEF8D981C8956A6 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x241 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI PUSH2 0x56E PUSH1 0x4 CALLDATALOAD PUSH2 0x1BC5 PUSH2 0x246 JUMP JUMPDEST SWAP1 PUSH2 0x1C00 PUSH2 0xBCB DUP3 PUSH1 0x0 MSTORE PUSH32 0x2DD7BC7DEC4DCEEDDA775E58DD541E08A116C6C53815C0BD028192F7B626800 PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x40 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 JUMP JUMPDEST PUSH2 0x2752 JUMP JUMPDEST CALLVALUE PUSH2 0x241 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI PUSH1 0x20 PUSH1 0xFF PUSH2 0x142E PUSH2 0x1C25 PUSH2 0x22B JUMP JUMPDEST PUSH2 0x162E PUSH2 0x1C30 PUSH2 0x246 JUMP JUMPDEST SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 MSTORE PUSH32 0x88BE536D5240C274A3B1D3A1BE54482FD9CAA294F08C62A7CDE569F49A3C4501 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP1 JUMP JUMPDEST CALLVALUE PUSH2 0x241 JUMPI PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x241 JUMPI PUSH2 0x1C82 PUSH2 0x22B JUMP JUMPDEST PUSH2 0x1C8A PUSH2 0x246 JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP1 PUSH1 0x64 CALLDATALOAD SWAP3 PUSH1 0x84 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x241 JUMPI PUSH2 0x1CB2 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x4B3 JUMP JUMPDEST SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND CALLER DUP2 EQ ISZERO DUP1 PUSH2 0x1D43 JUMPI JUMPDEST PUSH2 0x1D12 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND ISZERO PUSH2 0x11FF JUMPI ISZERO PUSH2 0x12A3 JUMPI PUSH2 0x56E SWAP5 PUSH2 0x1D0A PUSH1 0x40 MLOAD SWAP3 PUSH1 0x1 DUP5 MSTORE PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD SWAP2 PUSH1 0x1 DUP4 MSTORE PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP3 SWAP1 SWAP2 PUSH2 0x2C2F JUMP JUMPDEST PUSH32 0xE237D92200000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0x1D4E CALLER DUP5 PUSH2 0x2374 JUMP JUMPDEST ISZERO PUSH2 0x1CC7 JUMP JUMPDEST ISZERO PUSH2 0x1D5B JUMPI JUMP JUMPDEST PUSH1 0x84 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x26 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616C6C6572206973206E6F7420616E2061646D696E20726F6C652061757468 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6F72697365640000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE REVERT JUMPDEST SWAP1 PUSH2 0x1DF2 PUSH1 0x20 SWAP3 DUP3 DUP2 MLOAD SWAP5 DUP6 SWAP3 ADD PUSH2 0x6BA JUMP JUMPDEST ADD SWAP1 JUMP JUMPDEST SWAP4 SWAP3 SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND CALLER DUP2 EQ ISZERO DUP1 PUSH2 0x1E2F JUMPI JUMPDEST PUSH2 0x1D12 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ISZERO PUSH2 0x11FF JUMPI ISZERO PUSH2 0x12A3 JUMPI PUSH2 0x61A SWAP5 PUSH2 0x2C2F JUMP JUMPDEST POP PUSH1 0xFF PUSH2 0x1E72 CALLER PUSH2 0x162E DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 MSTORE PUSH32 0x88BE536D5240C274A3B1D3A1BE54482FD9CAA294F08C62A7CDE569F49A3C4501 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD AND ISZERO PUSH2 0x1E0E JUMP JUMPDEST SWAP1 PUSH2 0x1E84 DUP3 PUSH2 0xA6F JUMP JUMPDEST PUSH2 0x1E91 PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x46F JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x1F NOT PUSH2 0x1EA1 DUP3 SWAP5 PUSH2 0xA6F JUMP JUMPDEST ADD SWAP1 PUSH1 0x20 CALLDATASIZE SWAP2 ADD CALLDATACOPY JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x1EBF JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST SWAP2 SWAP1 SWAP2 DUP1 MLOAD DUP4 MLOAD DUP1 DUP3 SUB PUSH2 0x1F89 JUMPI POP POP PUSH2 0x1F08 DUP2 MLOAD PUSH2 0x1E7A JUMP JUMPDEST SWAP1 PUSH1 0x0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x1F82 JUMPI DUP1 PUSH2 0x1F70 PUSH1 0x1 SWAP3 PUSH1 0x5 SHL PUSH1 0x20 DUP1 DUP3 DUP8 ADD ADD MLOAD SWAP2 DUP10 ADD ADD MLOAD PUSH1 0x0 MSTORE PUSH32 0x88BE536D5240C274A3B1D3A1BE54482FD9CAA294F08C62A7CDE569F49A3C4500 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH2 0x1F7B DUP3 DUP7 PUSH2 0x1EAB JUMP JUMPDEST MSTORE ADD PUSH2 0x1F0C JUMP JUMPDEST POP SWAP1 SWAP3 POP POP JUMP JUMPDEST PUSH32 0x5B05999100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH1 0x0 REVERT JUMPDEST ISZERO PUSH2 0x1FC0 JUMPI JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x43616C6C6572206973206E6F742061206D696E74657200000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 NOT DUP2 EQ PUSH2 0x205C JUMPI PUSH1 0x1 ADD SWAP1 JUMP JUMPDEST PUSH2 0x201E JUMP JUMPDEST PUSH1 0x1F DUP2 GT PUSH2 0x206D JUMPI POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x20 PUSH1 0x1F DUP5 ADD PUSH1 0x5 SHR DUP4 ADD SWAP4 LT PUSH2 0x20AA JUMPI JUMPDEST PUSH1 0x1F ADD PUSH1 0x5 SHR ADD SWAP1 JUMPDEST DUP2 DUP2 LT PUSH2 0x209E JUMPI POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x2093 JUMP JUMPDEST SWAP1 SWAP2 POP DUP2 SWAP1 PUSH2 0x208A JUMP JUMPDEST PUSH1 0x1F DUP2 GT PUSH2 0x20C0 JUMPI POP POP JUMP JUMPDEST PUSH32 0x88BE536D5240C274A3B1D3A1BE54482FD9CAA294F08C62A7CDE569F49A3C4502 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x20 PUSH1 0x1F DUP5 ADD PUSH1 0x5 SHR DUP4 ADD SWAP4 LT PUSH2 0x211C JUMPI JUMPDEST PUSH1 0x1F ADD PUSH1 0x5 SHR ADD SWAP1 JUMPDEST DUP2 DUP2 LT PUSH2 0x2110 JUMPI POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x2105 JUMP JUMPDEST SWAP1 SWAP2 POP DUP2 SWAP1 PUSH2 0x20FC JUMP JUMPDEST PUSH1 0x1F DUP3 GT PUSH2 0x2133 JUMPI POP POP POP JUMP JUMPDEST PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x20 PUSH1 0x1F DUP5 ADD PUSH1 0x5 SHR DUP4 ADD SWAP4 LT PUSH2 0x216E JUMPI JUMPDEST PUSH1 0x1F ADD PUSH1 0x5 SHR ADD SWAP1 JUMPDEST DUP2 DUP2 LT PUSH2 0x2162 JUMPI POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x2157 JUMP JUMPDEST SWAP1 SWAP2 POP DUP2 SWAP1 PUSH2 0x214E JUMP JUMPDEST SWAP1 DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x492 JUMPI PUSH2 0x21A0 DUP2 PUSH2 0x2199 PUSH1 0x2 SLOAD PUSH2 0x570 JUMP JUMPDEST PUSH1 0x2 PUSH2 0x2126 JUMP JUMPDEST PUSH1 0x20 SWAP3 PUSH1 0x1F DUP3 GT PUSH1 0x1 EQ PUSH2 0x21E1 JUMPI PUSH2 0x21D1 SWAP3 SWAP4 DUP3 SWAP2 PUSH1 0x0 SWAP3 PUSH2 0x21D6 JUMPI JUMPDEST POP POP PUSH1 0x0 NOT DUP3 PUSH1 0x1 SHL SWAP3 PUSH1 0x3 SHL SHR NOT AND OR SWAP1 JUMP JUMPDEST PUSH1 0x2 SSTORE JUMP JUMPDEST ADD MLOAD SWAP1 POP CODESIZE DUP1 PUSH2 0x21BD JUMP JUMPDEST PUSH1 0x2 PUSH1 0x0 MSTORE PUSH1 0x1F NOT DUP3 AND SWAP4 PUSH32 0x405787FA12A823E0F2B7631CC41B3BA8828B3321CA811111FA75CD3AA3BB5ACE SWAP2 PUSH1 0x0 JUMPDEST DUP7 DUP2 LT PUSH2 0x2248 JUMPI POP DUP4 PUSH1 0x1 SWAP6 SWAP7 LT PUSH2 0x222F JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH1 0x2 SSTORE JUMP JUMPDEST ADD MLOAD PUSH1 0x0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE CODESIZE DUP1 DUP1 PUSH2 0x2224 JUMP JUMPDEST SWAP2 SWAP3 PUSH1 0x20 PUSH1 0x1 DUP2 SWAP3 DUP7 DUP6 ADD MLOAD DUP2 SSTORE ADD SWAP5 ADD SWAP3 ADD PUSH2 0x2211 JUMP JUMPDEST SWAP1 SWAP2 PUSH2 0x2276 SWAP1 PUSH2 0x226E PUSH2 0x2F38 JUMP JUMPDEST PUSH2 0x569 PUSH2 0x2F38 JUMP JUMPDEST PUSH2 0x227E PUSH2 0x2F38 JUMP JUMPDEST PUSH2 0x2287 CALLER PUSH2 0x25BE JUMP JUMPDEST POP DUP1 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x492 JUMPI PUSH2 0x22AE DUP3 PUSH2 0x22A9 PUSH1 0x1 SLOAD PUSH2 0x570 JUMP JUMPDEST PUSH2 0x2061 JUMP JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x1F DUP4 GT PUSH1 0x1 EQ PUSH2 0x22EA JUMPI SWAP2 DUP1 PUSH2 0x22E2 SWAP3 PUSH2 0x61A SWAP6 SWAP5 PUSH1 0x0 SWAP3 PUSH2 0x21D6 JUMPI POP POP PUSH1 0x0 NOT DUP3 PUSH1 0x1 SHL SWAP3 PUSH1 0x3 SHL SHR NOT AND OR SWAP1 JUMP JUMPDEST PUSH1 0x1 SSTORE PUSH2 0x2178 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 MSTORE PUSH1 0x1F NOT DUP4 AND SWAP2 SWAP1 PUSH32 0xB10E2D527612073B26EECDFD717E6A320CF44B4AFAC2B0732D9FCBE2B7FA0CF6 SWAP3 PUSH1 0x0 JUMPDEST DUP2 DUP2 LT PUSH2 0x235C JUMPI POP SWAP2 PUSH1 0x1 SWAP4 SWAP2 DUP6 PUSH2 0x61A SWAP8 SWAP7 SWAP5 LT PUSH2 0x2343 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH1 0x1 SSTORE PUSH2 0x2178 JUMP JUMPDEST ADD MLOAD PUSH1 0x0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE CODESIZE DUP1 DUP1 PUSH2 0x2335 JUMP JUMPDEST SWAP3 SWAP4 PUSH1 0x20 PUSH1 0x1 DUP2 SWAP3 DUP8 DUP7 ADD MLOAD DUP2 SSTORE ADD SWAP6 ADD SWAP4 ADD PUSH2 0x231B JUMP JUMPDEST PUSH1 0xFF SWAP2 PUSH2 0x162E PUSH2 0x23B6 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 MSTORE PUSH32 0x88BE536D5240C274A3B1D3A1BE54482FD9CAA294F08C62A7CDE569F49A3C4501 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD AND SWAP1 JUMP JUMPDEST SWAP1 DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x492 JUMPI PUSH2 0x2400 DUP2 PUSH2 0x23FB PUSH32 0x88BE536D5240C274A3B1D3A1BE54482FD9CAA294F08C62A7CDE569F49A3C4502 SLOAD PUSH2 0x570 JUMP JUMPDEST PUSH2 0x20B4 JUMP JUMPDEST PUSH1 0x20 SWAP3 PUSH1 0x1F DUP3 GT PUSH1 0x1 EQ PUSH2 0x2454 JUMPI PUSH2 0x2430 SWAP3 SWAP4 DUP3 SWAP2 PUSH1 0x0 SWAP3 PUSH2 0x21D6 JUMPI POP POP PUSH1 0x0 NOT DUP3 PUSH1 0x1 SHL SWAP3 PUSH1 0x3 SHL SHR NOT AND OR SWAP1 JUMP JUMPDEST PUSH32 0x88BE536D5240C274A3B1D3A1BE54482FD9CAA294F08C62A7CDE569F49A3C4502 SSTORE JUMP JUMPDEST PUSH32 0x88BE536D5240C274A3B1D3A1BE54482FD9CAA294F08C62A7CDE569F49A3C4502 PUSH1 0x0 MSTORE PUSH1 0x1F NOT DUP3 AND SWAP4 PUSH32 0xF429CB5E2EC84CBB765E76B31964A56CCDE03E7A6122D6CC4AFB19EDC55EDEED SWAP2 PUSH1 0x0 JUMPDEST DUP7 DUP2 LT PUSH2 0x24F9 JUMPI POP DUP4 PUSH1 0x1 SWAP6 SWAP7 LT PUSH2 0x24E0 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH32 0x88BE536D5240C274A3B1D3A1BE54482FD9CAA294F08C62A7CDE569F49A3C4502 SSTORE JUMP JUMPDEST ADD MLOAD PUSH1 0x0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE CODESIZE DUP1 DUP1 PUSH2 0x24B6 JUMP JUMPDEST SWAP2 SWAP3 PUSH1 0x20 PUSH1 0x1 DUP2 SWAP3 DUP7 DUP6 ADD MLOAD DUP2 SSTORE ADD SWAP5 ADD SWAP3 ADD PUSH2 0x24A3 JUMP JUMPDEST SWAP1 PUSH2 0x251B DUP3 PUSH2 0x497 JUMP JUMPDEST PUSH2 0x2528 PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x46F JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x1F NOT PUSH2 0x1EA1 DUP3 SWAP5 PUSH2 0x497 JUMP JUMPDEST DUP1 PUSH1 0x0 MSTORE PUSH32 0x2DD7BC7DEC4DCEEDDA775E58DD541E08A116C6C53815C0BD028192F7B626800 PUSH1 0x20 MSTORE PUSH1 0xFF PUSH2 0x2583 CALLER PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD AND ISZERO PUSH2 0x258D JUMPI POP JUMP JUMPDEST PUSH32 0xE2517D3F00000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH32 0xB7DB2DD08FCB62D0C9E08C51941CAE53C267786A0B75803FB7960902FC8EF97D PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x266A JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH32 0xB7DB2DD08FCB62D0C9E08C51941CAE53C267786A0B75803FB7960902FC8EF97D PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE CALLER SWAP2 SWAP1 PUSH32 0x2F8788117E7EFF1D82E926EC794901D17C78024A50270940304540A733656F0D DUP2 DUP1 LOG4 PUSH1 0x1 SWAP1 JUMP JUMPDEST POP PUSH1 0x0 SWAP1 JUMP JUMPDEST DUP1 PUSH1 0x0 MSTORE PUSH32 0x2DD7BC7DEC4DCEEDDA775E58DD541E08A116C6C53815C0BD028192F7B626800 PUSH1 0x20 MSTORE PUSH1 0xFF PUSH2 0x26BB DUP4 PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD AND PUSH2 0x274B JUMPI DUP1 PUSH1 0x0 MSTORE PUSH32 0x2DD7BC7DEC4DCEEDDA775E58DD541E08A116C6C53815C0BD028192F7B626800 PUSH1 0x20 MSTORE PUSH2 0x270A DUP3 PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0xFF NOT DUP3 SLOAD AND OR SWAP1 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB CALLER SWAP3 AND SWAP1 PUSH32 0x2F8788117E7EFF1D82E926EC794901D17C78024A50270940304540A733656F0D PUSH1 0x0 DUP1 LOG4 PUSH1 0x1 SWAP1 JUMP JUMPDEST POP POP PUSH1 0x0 SWAP1 JUMP JUMPDEST DUP1 PUSH1 0x0 MSTORE PUSH32 0x2DD7BC7DEC4DCEEDDA775E58DD541E08A116C6C53815C0BD028192F7B626800 PUSH1 0x20 MSTORE PUSH1 0xFF PUSH2 0x279D DUP4 PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD AND ISZERO PUSH2 0x274B JUMPI DUP1 PUSH1 0x0 MSTORE PUSH32 0x2DD7BC7DEC4DCEEDDA775E58DD541E08A116C6C53815C0BD028192F7B626800 PUSH1 0x20 MSTORE PUSH2 0x27ED DUP3 PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP1 JUMP JUMPDEST PUSH1 0xFF NOT DUP2 SLOAD AND SWAP1 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB CALLER SWAP3 AND SWAP1 PUSH32 0xF6391F5C32D9C69D2A47EA670B442974B53935D1EDC7FD64EB21E047A839171B PUSH1 0x0 DUP1 LOG4 PUSH1 0x1 SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x241 JUMPI MLOAD SWAP1 JUMP JUMPDEST SWAP4 SWAP2 SWAP1 SWAP2 PUSH2 0x284B DUP3 DUP5 DUP8 PUSH1 0x0 PUSH2 0x339C JUMP JUMPDEST PUSH1 0x0 SWAP5 DUP6 JUMPDEST DUP5 MLOAD DUP8 LT ISZERO PUSH2 0x28BD JUMPI PUSH2 0x28B5 PUSH1 0x1 SWAP2 DUP9 PUSH1 0x5 SHL SWAP1 PUSH2 0x28A3 PUSH1 0x20 DUP1 DUP5 DUP11 ADD ADD MLOAD SWAP4 DUP11 ADD ADD MLOAD PUSH1 0x0 MSTORE PUSH32 0x4A593662EE04D27B6A00EBB31BE7FE0C102C2ADE82A7C5D764F2DF05DC4E2800 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP1 JUMP JUMPDEST PUSH2 0x28AE DUP4 DUP3 SLOAD PUSH2 0x32DA JUMP JUMPDEST SWAP1 SSTORE PUSH2 0x32DA JUMP JUMPDEST SWAP7 ADD SWAP6 PUSH2 0x2850 JUMP JUMPDEST PUSH2 0x2915 SWAP2 SWAP6 SWAP5 SWAP3 SWAP7 POP PUSH2 0x28F1 SWAP1 PUSH32 0x4A593662EE04D27B6A00EBB31BE7FE0C102C2ADE82A7C5D764F2DF05DC4E2801 SLOAD PUSH2 0x32DA JUMP JUMPDEST PUSH32 0x4A593662EE04D27B6A00EBB31BE7FE0C102C2ADE82A7C5D764F2DF05DC4E2801 SSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND ISZERO DUP1 PUSH2 0x296C JUMPI JUMPDEST ISZERO PUSH2 0x2932 JUMPI JUMPDEST POP POP POP POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x1 SUB PUSH2 0x295B JUMPI SWAP1 PUSH1 0x20 DUP1 PUSH2 0x2952 SWAP6 SWAP4 ADD MLOAD SWAP2 ADD MLOAD SWAP2 PUSH1 0x0 CALLER PUSH2 0x31D1 JUMP JUMPDEST CODESIZE DUP1 DUP1 DUP1 PUSH2 0x292C JUMP JUMPDEST PUSH2 0x2967 SWAP4 PUSH1 0x0 CALLER PUSH2 0x3024 JUMP JUMPDEST PUSH2 0x2952 JUMP JUMPDEST SWAP4 PUSH1 0x0 SWAP6 SWAP2 SWAP4 PUSH1 0x0 SWAP7 JUMPDEST DUP6 MLOAD DUP9 LT ISZERO PUSH2 0x29D5 JUMPI PUSH1 0x1 SWAP1 DUP9 PUSH1 0x5 SHL SWAP1 PUSH2 0x29C6 PUSH1 0x20 DUP1 DUP5 DUP11 ADD ADD MLOAD SWAP4 DUP11 ADD ADD MLOAD PUSH1 0x0 MSTORE PUSH32 0x4A593662EE04D27B6A00EBB31BE7FE0C102C2ADE82A7C5D764F2DF05DC4E2800 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP1 JUMP JUMPDEST DUP3 DUP2 SLOAD SUB SWAP1 SSTORE ADD SWAP8 ADD SWAP7 PUSH2 0x2976 JUMP JUMPDEST PUSH2 0x2A27 SWAP2 SWAP6 SWAP4 SWAP8 POP SWAP6 SWAP2 SWAP6 PUSH32 0x4A593662EE04D27B6A00EBB31BE7FE0C102C2ADE82A7C5D764F2DF05DC4E2801 SLOAD SUB PUSH32 0x4A593662EE04D27B6A00EBB31BE7FE0C102C2ADE82A7C5D764F2DF05DC4E2801 SSTORE JUMP JUMPDEST PUSH2 0x2926 JUMP JUMPDEST SWAP1 SWAP2 SWAP4 SWAP3 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO SWAP1 DUP2 DUP1 ISZERO PUSH2 0x2C27 JUMPI JUMPDEST ISZERO PUSH2 0x2BA3 JUMPI DUP5 DUP4 PUSH1 0x0 PUSH2 0x2A57 SWAP4 PUSH2 0x339C JUMP JUMPDEST PUSH2 0x2B0F JUMPI JUMPDEST PUSH1 0x0 DUP1 JUMPDEST DUP3 MLOAD DUP3 LT ISZERO PUSH2 0x2ABF JUMPI PUSH1 0x1 SWAP1 DUP3 PUSH1 0x5 SHL SWAP1 PUSH2 0x2AB0 PUSH1 0x20 DUP1 DUP5 DUP11 ADD ADD MLOAD SWAP4 DUP8 ADD ADD MLOAD PUSH1 0x0 MSTORE PUSH32 0x4A593662EE04D27B6A00EBB31BE7FE0C102C2ADE82A7C5D764F2DF05DC4E2800 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP1 JUMP JUMPDEST DUP3 DUP2 SLOAD SUB SWAP1 SSTORE ADD SWAP2 ADD SWAP1 PUSH2 0x2A60 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x61A SWAP2 SWAP3 POP PUSH32 0x4A593662EE04D27B6A00EBB31BE7FE0C102C2ADE82A7C5D764F2DF05DC4E2801 SLOAD SUB PUSH32 0x4A593662EE04D27B6A00EBB31BE7FE0C102C2ADE82A7C5D764F2DF05DC4E2801 SSTORE JUMP JUMPDEST PUSH1 0x0 DUP1 JUMPDEST DUP3 MLOAD DUP3 LT ISZERO PUSH2 0x2B6E JUMPI PUSH2 0x2B66 PUSH1 0x1 SWAP2 DUP4 PUSH1 0x5 SHL SWAP1 PUSH2 0x28A3 PUSH1 0x20 DUP1 DUP5 DUP12 ADD ADD MLOAD SWAP4 DUP9 ADD ADD MLOAD PUSH1 0x0 MSTORE PUSH32 0x4A593662EE04D27B6A00EBB31BE7FE0C102C2ADE82A7C5D764F2DF05DC4E2800 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP2 ADD SWAP1 PUSH2 0x2B13 JUMP JUMPDEST PUSH2 0x2B9E SWAP2 POP PUSH2 0x28F1 SWAP1 PUSH32 0x4A593662EE04D27B6A00EBB31BE7FE0C102C2ADE82A7C5D764F2DF05DC4E2801 SLOAD PUSH2 0x32DA JUMP JUMPDEST PUSH2 0x2A5C JUMP JUMPDEST PUSH1 0x84 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x27 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4120536F756C626F756E6420746F6B656E2063616E6E6F74206265207472616E PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x7366657272656400000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE REVERT JUMPDEST POP PUSH1 0x1 PUSH2 0x2A45 JUMP JUMPDEST SWAP2 SWAP4 SWAP3 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND ISZERO DUP1 DUP1 ISZERO PUSH2 0x2E0B JUMPI JUMPDEST ISZERO PUSH2 0x2BA3 JUMPI PUSH2 0x2C57 DUP4 DUP8 DUP5 DUP8 PUSH2 0x339C JUMP JUMPDEST PUSH2 0x2D6F JUMPI JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND ISZERO DUP1 PUSH2 0x2CB1 JUMPI JUMPDEST ISZERO PUSH2 0x2C7A JUMPI JUMPDEST POP POP POP POP POP JUMP JUMPDEST DUP5 MLOAD PUSH1 0x1 SUB PUSH2 0x2CA0 JUMPI PUSH1 0x20 DUP1 PUSH2 0x2C96 SWAP7 ADD MLOAD SWAP3 ADD MLOAD SWAP3 CALLER PUSH2 0x31D1 JUMP JUMPDEST CODESIZE DUP1 DUP1 DUP1 DUP1 PUSH2 0x2C73 JUMP JUMPDEST PUSH2 0x2CAC SWAP5 SWAP2 SWAP3 CALLER PUSH2 0x3024 JUMP JUMPDEST PUSH2 0x2C96 JUMP JUMPDEST SWAP5 SWAP4 PUSH1 0x0 SWAP4 SWAP1 SWAP2 DUP5 JUMPDEST DUP7 MLOAD DUP7 LT ISZERO PUSH2 0x2D19 JUMPI PUSH1 0x1 SWAP1 DUP7 PUSH1 0x5 SHL SWAP1 PUSH2 0x2D0A PUSH1 0x20 DUP1 DUP5 DUP11 ADD ADD MLOAD SWAP4 DUP12 ADD ADD MLOAD PUSH1 0x0 MSTORE PUSH32 0x4A593662EE04D27B6A00EBB31BE7FE0C102C2ADE82A7C5D764F2DF05DC4E2800 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP1 JUMP JUMPDEST DUP3 DUP2 SLOAD SUB SWAP1 SSTORE ADD SWAP6 ADD SWAP5 PUSH2 0x2CBA JUMP JUMPDEST PUSH2 0x2D6A SWAP2 SWAP4 SWAP7 SWAP8 SWAP3 SWAP6 POP PUSH32 0x4A593662EE04D27B6A00EBB31BE7FE0C102C2ADE82A7C5D764F2DF05DC4E2801 SLOAD SUB PUSH32 0x4A593662EE04D27B6A00EBB31BE7FE0C102C2ADE82A7C5D764F2DF05DC4E2801 SSTORE JUMP JUMPDEST PUSH2 0x2C6D JUMP JUMPDEST SWAP4 SWAP3 PUSH1 0x0 SWAP3 DUP4 JUMPDEST DUP6 MLOAD DUP6 LT ISZERO PUSH2 0x2DD1 JUMPI PUSH2 0x2DC9 PUSH1 0x1 SWAP2 DUP7 PUSH1 0x5 SHL SWAP1 PUSH2 0x28A3 PUSH1 0x20 DUP1 DUP5 DUP11 ADD ADD MLOAD SWAP4 DUP12 ADD ADD MLOAD PUSH1 0x0 MSTORE PUSH32 0x4A593662EE04D27B6A00EBB31BE7FE0C102C2ADE82A7C5D764F2DF05DC4E2800 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP5 ADD SWAP4 PUSH2 0x2D76 JUMP JUMPDEST PUSH2 0x2E06 SWAP2 SWAP5 POP PUSH2 0x28F1 SWAP1 SWAP7 SWAP3 SWAP6 SWAP7 PUSH32 0x4A593662EE04D27B6A00EBB31BE7FE0C102C2ADE82A7C5D764F2DF05DC4E2801 SLOAD PUSH2 0x32DA JUMP JUMPDEST PUSH2 0x2C5C JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND ISZERO PUSH2 0x2C46 JUMP JUMPDEST SWAP1 DUP2 EXTCODESIZE ISZERO PUSH2 0x2F01 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SLOAD AND OR PUSH32 0x360894A13BA1A3210667C828492DB98DCA3E2076CC3735A920A3CA505D382BBC SSTORE PUSH32 0xBC7CD75A20EE27FD9ADEBAB32041F755214DBC6BFFA90CC0225B39DA2E5C2D3B PUSH1 0x0 DUP1 LOG2 DUP1 MLOAD ISZERO PUSH2 0x2ECE JUMPI PUSH2 0x2ECB SWAP2 PUSH2 0x32BC JUMP JUMPDEST POP JUMP JUMPDEST POP POP CALLVALUE PUSH2 0x2ED7 JUMPI JUMP JUMPDEST PUSH32 0xB398979F00000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 PUSH32 0x4C9C8CE300000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0xFF PUSH32 0xF0C57E16840DF040F15088DC2F81FE391C3923BEC73E23A9662EFC9C229C6A00 SLOAD PUSH1 0x40 SHR AND ISZERO PUSH2 0x2F67 JUMPI JUMP JUMPDEST PUSH32 0xD7E6BCF800000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x0 REVERT JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x241 JUMPI MLOAD PUSH2 0x713 DUP2 PUSH2 0x2DD JUMP JUMPDEST SWAP4 SWAP1 PUSH2 0x713 SWAP6 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x2FE6 SWAP5 DUP2 PUSH2 0x2FD8 SWAP5 AND DUP9 MSTORE AND PUSH1 0x20 DUP8 ADD MSTORE PUSH1 0xA0 PUSH1 0x40 DUP8 ADD MSTORE PUSH1 0xA0 DUP7 ADD SWAP1 PUSH2 0xD26 JUMP JUMPDEST SWAP1 DUP5 DUP3 SUB PUSH1 0x60 DUP7 ADD MSTORE PUSH2 0xD26 JUMP JUMPDEST SWAP2 PUSH1 0x80 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0x6DD JUMP JUMPDEST RETURNDATASIZE ISZERO PUSH2 0x301F JUMPI RETURNDATASIZE SWAP1 PUSH2 0x3005 DUP3 PUSH2 0x497 JUMP JUMPDEST SWAP2 PUSH2 0x3013 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x46F JUMP JUMPDEST DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY JUMP JUMPDEST PUSH1 0x60 SWAP1 JUMP JUMPDEST SWAP1 SWAP2 SWAP5 SWAP3 SWAP4 DUP6 EXTCODESIZE PUSH2 0x3038 JUMPI JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 SWAP4 PUSH2 0x3073 SWAP2 PUSH1 0x40 MLOAD SWAP7 DUP8 SWAP6 DUP7 SWAP6 PUSH32 0xBC197C8100000000000000000000000000000000000000000000000000000000 DUP8 MSTORE PUSH1 0x4 DUP8 ADD PUSH2 0x2FA6 JUMP JUMPDEST SUB DUP2 PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND GAS CALL PUSH1 0x0 SWAP2 DUP2 PUSH2 0x316C JUMPI JUMPDEST POP PUSH2 0x30E1 JUMPI POP PUSH2 0x309A PUSH2 0x2FF4 JUMP JUMPDEST DUP1 MLOAD SWAP2 SWAP1 DUP3 PUSH2 0x30DA JUMPI PUSH32 0x57F447CE00000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x20 SWAP2 POP ADD REVERT JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH32 0xBC197C8100000000000000000000000000000000000000000000000000000000 SWAP2 AND SUB PUSH2 0x3136 JUMPI POP CODESIZE DUP1 DUP1 DUP1 DUP1 DUP1 PUSH2 0x3030 JUMP JUMPDEST PUSH32 0x57F447CE00000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0x318F SWAP2 SWAP3 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x3196 JUMPI JUMPDEST PUSH2 0x3187 DUP2 DUP4 PUSH2 0x46F JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x2F91 JUMP JUMPDEST SWAP1 CODESIZE PUSH2 0x308C JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x317D JUMP JUMPDEST SWAP2 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0xA0 SWAP5 DUP2 PUSH2 0x713 SWAP9 SWAP8 SWAP5 AND DUP6 MSTORE AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE DUP2 PUSH1 0x80 DUP3 ADD MSTORE ADD SWAP1 PUSH2 0x6DD JUMP JUMPDEST SWAP1 SWAP2 SWAP5 SWAP3 SWAP4 DUP6 EXTCODESIZE PUSH2 0x31E4 JUMPI POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x20 SWAP4 PUSH2 0x321F SWAP2 PUSH1 0x40 MLOAD SWAP7 DUP8 SWAP6 DUP7 SWAP6 PUSH32 0xF23A6E6100000000000000000000000000000000000000000000000000000000 DUP8 MSTORE PUSH1 0x4 DUP8 ADD PUSH2 0x319D JUMP JUMPDEST SUB DUP2 PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND GAS CALL PUSH1 0x0 SWAP2 DUP2 PUSH2 0x329B JUMPI JUMPDEST POP PUSH2 0x3246 JUMPI POP PUSH2 0x309A PUSH2 0x2FF4 JUMP JUMPDEST PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH32 0xF23A6E6100000000000000000000000000000000000000000000000000000000 SWAP2 AND SUB PUSH2 0x3136 JUMPI POP CODESIZE DUP1 DUP1 DUP1 DUP1 DUP1 PUSH2 0x3030 JUMP JUMPDEST PUSH2 0x32B5 SWAP2 SWAP3 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x3196 JUMPI PUSH2 0x3187 DUP2 DUP4 PUSH2 0x46F JUMP JUMPDEST SWAP1 CODESIZE PUSH2 0x3238 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x713 SWAP4 PUSH1 0x20 DUP2 MLOAD SWAP2 ADD DUP5 GAS DELEGATECALL PUSH2 0x32D4 PUSH2 0x2FF4 JUMP JUMPDEST SWAP2 PUSH2 0x32E7 JUMP JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x205C JUMPI JUMP JUMPDEST SWAP1 PUSH2 0x3326 JUMPI POP DUP1 MLOAD ISZERO PUSH2 0x32FC JUMPI PUSH1 0x20 DUP2 MLOAD SWAP2 ADD REVERT JUMPDEST PUSH32 0xD6BDA27500000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x4 PUSH1 0x0 REVERT JUMPDEST DUP2 MLOAD ISZERO DUP1 PUSH2 0x336E JUMPI JUMPDEST PUSH2 0x3337 JUMPI POP SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH32 0x9996B31500000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x332F JUMP JUMPDEST SWAP1 SWAP2 PUSH2 0x338E PUSH2 0x713 SWAP4 PUSH1 0x40 DUP5 MSTORE PUSH1 0x40 DUP5 ADD SWAP1 PUSH2 0xD26 JUMP JUMPDEST SWAP2 PUSH1 0x20 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0xD26 JUMP JUMPDEST SWAP4 SWAP3 SWAP2 DUP1 MLOAD DUP4 MLOAD SWAP1 DUP2 DUP2 SUB PUSH2 0x1F89 JUMPI POP POP PUSH1 0x0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x351C JUMPI DUP1 PUSH1 0x5 SHL SWAP1 PUSH1 0x20 DUP1 DUP4 DUP6 ADD ADD MLOAD SWAP3 DUP7 ADD ADD MLOAD DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND PUSH2 0x3442 JUMPI JUMPDEST PUSH1 0x1 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x33F6 JUMPI JUMPDEST POP POP POP ADD PUSH2 0x33B0 JUMP JUMPDEST PUSH2 0x3438 SWAP2 PUSH2 0x162E PUSH2 0x3430 SWAP3 PUSH1 0x0 MSTORE PUSH32 0x88BE536D5240C274A3B1D3A1BE54482FD9CAA294F08C62A7CDE569F49A3C4500 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP2 DUP3 SLOAD PUSH2 0x32DA JUMP JUMPDEST SWAP1 SSTORE CODESIZE DUP5 DUP2 PUSH2 0x33ED JUMP JUMPDEST POP SWAP1 SWAP2 PUSH2 0x347C DUP9 PUSH2 0x162E DUP4 PUSH1 0x0 MSTORE PUSH32 0x88BE536D5240C274A3B1D3A1BE54482FD9CAA294F08C62A7CDE569F49A3C4500 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD DUP3 DUP2 LT PUSH2 0x34CC JUMPI DUP3 SWAP2 PUSH1 0x1 SWAP5 SWAP4 DUP8 SWAP3 SUB PUSH2 0x34C4 DUP12 PUSH2 0x162E DUP5 PUSH1 0x0 MSTORE PUSH32 0x88BE536D5240C274A3B1D3A1BE54482FD9CAA294F08C62A7CDE569F49A3C4500 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE SWAP4 POP PUSH2 0x33DB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x3DEE4C500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x44 DUP2 ADD DUP4 SWAP1 MSTORE PUSH1 0x64 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x84 SWAP1 REVERT JUMPDEST POP DUP1 MLOAD SWAP4 SWAP5 SWAP4 SWAP2 SWAP3 SWAP2 PUSH1 0x1 SUB PUSH2 0x357F JUMPI PUSH1 0x20 SWAP1 DUP2 ADD MLOAD SWAP2 DUP2 ADD MLOAD PUSH1 0x40 DUP1 MLOAD SWAP4 DUP5 MSTORE SWAP2 DUP4 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND SWAP4 SWAP1 SWAP3 AND SWAP2 CALLER SWAP2 PUSH32 0xC3D58168C5AE7397731D063D5BBF3D657854427343F4C083240F7AACAA2D0F62 SWAP2 DUP2 SWAP1 DUP2 ADD JUMPDEST SUB SWAP1 LOG4 JUMP JUMPDEST SWAP1 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x4A39DC06D4C0DBC64B70AF90FD698A233A518AA5D07E595D983B8C0526C8F7FB SWAP2 PUSH2 0x357A DUP3 PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP4 AND SWAP8 AND SWAP6 CALLER SWAP6 DUP4 PUSH2 0x3377 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xF7 0xAD 0xDB 0xC7 0xD3 NOT CHAINID 0xDD 0xDC DUP4 SWAP4 PC SMOD 0xE4 SWAP11 0x26 0xC2 CALLDATACOPY 0xE7 CALL DUP16 0xDF DUP9 STOP 0xDC OR 0xCA 0xA9 SAR 0xA5 PUSH1 0x6E PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ",
              "sourceMap": "760:3370:31:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;760:3370:31;;;;;;:::o;:::-;;;;;;;;-1:-1:-1;;;;;760:3370:31;;;;;;:::o;:::-;;;-1:-1:-1;;;;;760:3370:31;;;;;;:::o;:::-;;;;;-1:-1:-1;;760:3370:31;;;;;;3458:24:4;760:3370:31;;:::i;:::-;;;-1:-1:-1;760:3370:31;1999:65:4;760:3370:31;;;-1:-1:-1;760:3370:31;;-1:-1:-1;;;;;760:3370:31;;;;;;;;;;3458:24:4;760:3370:31;;;;;;;;;;;;;;:::o;:::-;;;;;-1:-1:-1;;760:3370:31;;;;;;;;;;;:::i;:::-;;3911:36;3896:51;;:91;;;;;760:3370;-1:-1:-1;760:3370:31;;;;;;;;;;3896:91;3614:32:0;3599:47;;;-1:-1:-1;3599:87:0;;;;3896:91:31;;;;;3599:87:0;2549:26:4;2534:41;;;-1:-1:-1;2534:109:4;;;;3599:87:0;2534:161:4;;;;3599:87:0;;;;;2534:161:4;1116:25:8;1101:40;;;2534:161:4;;;:109;2606:37;2591:52;;;-1:-1:-1;2534:109:4;;760:3370:31;;;;;;;;;;;;;-1:-1:-1;;760:3370:31;;;;;;;;;;;;;;;;:::o;:::-;;:::i;:::-;;;;;;;;-1:-1:-1;;760:3370:31;;;;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;760:3370:31;;;;;;;;;;;;:::o;:::-;;;;;-1:-1:-1;;760:3370:31;;;;;;;;;;;;;3358:6;760:3370;;;;;;:::i;:::-;3286:10;-1:-1:-1;760:3370:31;;;;;;;;;3250:90;;760:3370;;3949:31:0;760:3370:31;;3250:90;:::i;:::-;3358:6;:::i;:::-;760:3370;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;760:3370:31;3250:6:4;760:3370:31;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:::o;:::-;-1:-1:-1;3250:6:4;-1:-1:-1;760:3370:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;760:3370:31;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;760:3370:31;;;;:::o;:::-;;;;;;;;;;;;;;;-1:-1:-1;;760:3370:31;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::o;:::-;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;-1:-1:-1;;760:3370:31;;;;;;;;1108:18;760:3370;;;;:::i;:::-;;;;;1108:18;760:3370;;;1108:18;;;;760:3370;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;1108:18;760:3370;;;;;;;-1:-1:-1;760:3370:31;;;;;;;-1:-1:-1;760:3370:31;;-1:-1:-1;760:3370:31;;;;;;;;;;1108:18;760:3370;;;;;;;;;;;;;;;;;;;-1:-1:-1;;760:3370:31;;;;;;;;;;;;;;;;;;;;-1:-1:-1;760:3370:31;;-1:-1:-1;760:3370:31;;;;;;;-1:-1:-1;;760:3370:31;;;;;;;;;:::i;:::-;3504:13;1430:17:26;-1:-1:-1;29282:17:28;29291:8;29282:17;;;29278:103;;760:3370:31;29398:17:28;;29407:8;29978:7;29398:17;;;29394:103;;760:3370:31;29523:8:28;29514:17;;;29510:103;;760:3370:31;29639:7:28;29630:16;;;29626:100;;760:3370:31;29752:7:28;29743:16;;;29739:100;;760:3370:31;29865:7:28;29856:16;;;29852:100;;760:3370:31;29969:16:28;;29965:66;;760:3370:31;1834:11:26;-1:-1:-1;;1545:94:26;1488:18;1450:1;760:3370:31;;1488:18:26;:::i;:::-;1520:11;1545:94;;;1652:247;760:3370:31;1706:111:26;;29978:7:28;1706:111:26;;;;;29978:7:28;760:3370:31;;;;1834:11:26;1867:10;;;1863:21;;1834:11;;-1:-1:-1;;760:3370:31;1652:247:26;;1863:21;760:3370:31;;;;3472:55;760:3370;;;1879:5:26;760:3370:31;;3472:55;;1879:5:26;760:3370:31;:::i;:::-;;;:::i;:::-;;;;;;;;;3472:55;-1:-1:-1;;3472:55:31;;;;;;:::i;29965:66:28:-;30015:1;760:3370:31;;;;29965:66:28;;29852:100;3250:6:4;;29865:7:28;760:3370:31;;;;29852:100:28;;;29739;760:3370:31;;29752:7:28;760:3370:31;;;;29739:100:28;;;29626;29710:1;;29639:7;760:3370:31;;;;29626:100:28;;;29510:103;29596:2;;29523:8;760:3370:31;;;;29510:103:28;;;29394;760:3370:31;;29407:8:28;760:3370:31;;;;29394:103:28;;;29278;29364:2;;-1:-1:-1;29291:8:28;760:3370:31;;;-1:-1:-1;29978:7:28;29278:103;;760:3370:31;;;;;-1:-1:-1;;760:3370:31;;;;;;2261:17:5;760:3370:31;;;;;;;;;;;;-1:-1:-1;;760:3370:31;;;;;;;;;-1:-1:-1;760:3370:31;2968:71:0;760:3370:31;;4967:24:0;760:3370:31;-1:-1:-1;760:3370:31;4967:24:0;760:3370:31;4807:191:0;;760:3370:31;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;760:3370:31;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::i;:::-;;;;;-1:-1:-1;;760:3370:31;;;;;5398:25:0;760:3370:31;;;;:::i;:::-;5368:18:0;3283:4;5368:18;;-1:-1:-1;760:3370:31;2968:71:0;760:3370:31;;4967:24:0;760:3370:31;-1:-1:-1;760:3370:31;4967:24:0;760:3370:31;4807:191:0;;5368:18;3283:4;:::i;:::-;5398:25;:::i;760:3370:31:-;;;;;-1:-1:-1;;760:3370:31;;;;;;;;;:::i;:::-;966:10:6;-1:-1:-1;;;;;760:3370:31;;6489:34:0;6485:102;;6597:37;;;:::i;6485:102::-;6546:30;-1:-1:-1;6546:30:0;760:3370:31;-1:-1:-1;6546:30:0;760:3370:31;;;;;-1:-1:-1;;760:3370:31;;;;;2139:10;760:3370;;;;;;;;;;2103:90;;760:3370;;3949:31:0;760:3370:31;2103:90;1237:66:7;760:3370:31;;;;2971:9:7;2967:62;;-1:-1:-1;;760:3370:31;1237:66:7;760:3370:31;3627:22:7;760:3370:31;;;2139:10;760:3370;;3627:22:7;760:3370:31;2967:62:7;3003:15;760:3370:31;3003:15:7;760:3370:31;;3003:15:7;760:3370:31;;;;;;;;;;;;;;-1:-1:-1;760:3370:31;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;760:3370:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;760:3370:31;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;4667:6:3;-1:-1:-1;;;;;4667:6:3;760:3370:31;4658:4:3;;4650:23;:120;;;;;760:3370:31;4633:251:3;;;760:3370:31;;6131:52:3;760:3370:31;6131:52:3;;760:3370:31;;;;-1:-1:-1;;;;;760:3370:31;;6131:52:3;;-1:-1:-1;;6131:52:3;;;760:3370:31;-1:-1:-1;6127:437:3;;6493:60;-1:-1:-1;6493:60:3;-1:-1:-1;;;;;760:3370:31;;;;;-1:-1:-1;6493:60:3;6127:437;6225:40;811:66:13;6225:40:3;;6221:120;;6403:4;;;;:::i;6221:120::-;6292:34;-1:-1:-1;6292:34:3;760:3370:31;;;;;-1:-1:-1;6493:60:3;6131:52;;;;;760:3370:31;6131:52:3;760:3370:31;6131:52:3;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;4633:251;4844:29;-1:-1:-1;4844:29:3;760:3370:31;-1:-1:-1;4844:29:3;4650:120;760:3370:31;;-1:-1:-1;;;;;811:66:13;760:3370:31;;4728:42:3;;4650:120;;;760:3370:31;;;;;-1:-1:-1;;760:3370:31;;;;;;;-1:-1:-1;760:3370:31;1571:71:5;760:3370:31;;;;-1:-1:-1;760:3370:31;;2458:19:5;;760:3370:31;;;;;;;;;;;-1:-1:-1;;760:3370:31;;;;;-1:-1:-1;;;;;5090:6:3;760:3370:31;5081:4:3;5073:23;5069:145;;760:3370:31;;;811:66:13;760:3370:31;;;;;;;;-1:-1:-1;;760:3370:31;;;;;;;;;;;;;;;;;;;-1:-1:-1;;760:3370:31;;;;;;;1237:66:7;760:3370:31;;;;;;;;;;;;;;;-1:-1:-1;;760:3370:31;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::i;:::-;;2572:29;760:3370;;2572:29;:::i;:::-;2640:10;-1:-1:-1;760:3370:31;;;;;;;;;2611:67;;760:3370;;3949:31:0;760:3370:31;;2611:67;:::i;:::-;-1:-1:-1;2728:3:31;760:3370;;2708:18;;;;;760:3370;;2747:17;-1:-1:-1;760:3370:31;2747:17;:::i;:::-;760:3370;-1:-1:-1;760:3370:31;2825:26;;;;:::i;:::-;760:3370;;2693:13;;2708:18;;;760:3370;;;;;;;:::i;:::-;-1:-1:-1;760:3370:31;;-1:-1:-1;;;;;760:3370:31;;12811:16:4;12807:88;;12960:4;;;:::i;12807:88::-;12850:34;-1:-1:-1;12850:34:4;-1:-1:-1;760:3370:31;;;-1:-1:-1;12850:34:4;760:3370:31;;;;;-1:-1:-1;;760:3370:31;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;3150:10;;14055:18:4;14051:88;;14148:61;760:3370:31;;;;;;;;:::i;:::-;-1:-1:-1;760:3370:31;;3150:10;14148:61:4;:::i;14051:88::-;14096:32;-1:-1:-1;14096:32:4;-1:-1:-1;760:3370:31;;;-1:-1:-1;14096:32:4;760:3370:31;;;;;-1:-1:-1;;760:3370:31;;;;;1974:10;760:3370;;;;;;;;;;1938:90;;760:3370;;3949:31:0;760:3370:31;1938:90;1237:66:7;760:3370:31;;;;2770:61:7;;-1:-1:-1;;3300:4:7;760:3370:31;;;1237:66:7;760:3370:31;3319:20:7;760:3370:31;;;1974:10;760:3370;;3319:20:7;760:3370:31;2770:61:7;2805:15;760:3370:31;2805:15:7;760:3370:31;;2805:15:7;760:3370:31;;;;;-1:-1:-1;;760:3370:31;;;;;;;3949:31:0;760:3370:31;;;;:::i;:::-;;-1:-1:-1;760:3370:31;2968:71:0;760:3370:31;;;-1:-1:-1;760:3370:31;;-1:-1:-1;;;;;760:3370:31;;;;;;;;;;3949:31:0;760:3370:31;;;;;;;;;;;;;;;-1:-1:-1;;760:3370:31;;;;;;;;;:::i;:::-;2324:10;-1:-1:-1;760:3370:31;;;;;;;;;2295:67;;760:3370;;3949:31:0;760:3370:31;2295:67;2372:17;-1:-1:-1;760:3370:31;2372:17;:::i;:::-;760:3370;;-1:-1:-1;760:3370:31;;;;;;;;:::i;:::-;-1:-1:-1;760:3370:31;;-1:-1:-1;;;;;760:3370:31;;12009:16:4;12005:88;;12247:4;12152:29;;15093:648;;;;;;;;;;;;;;;;;;;;;;;;;;14925:822;12152:29;12247:4;;:::i;760:3370:31:-;;;;;-1:-1:-1;;760:3370:31;;;;;;;;1132:20;760:3370;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1132:20;760:3370;;;;;;;-1:-1:-1;760:3370:31;;;;;;;-1:-1:-1;760:3370:31;;-1:-1:-1;760:3370:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;760:3370:31;;;;;;;;;;;;;;;;;-1:-1:-1;;760:3370:31;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;760:3370:31;;14599:22:4;;;14595:94;;14698:37;3654:10:31;14698:27:4;3654:10:31;-1:-1:-1;;;;;760:3370:31;;;14698:20:4;760:3370:31;;;;;;;14698:27:4;760:3370:31;-1:-1:-1;;;;;760:3370:31;;;;;;;;;;14698:37:4;-1:-1:-1;;760:3370:31;;;;;;;;;;;;;;14761:41:4;760:3370:31;3654:10;14761:41:4;;760:3370:31;14595:94:4;14644:34;-1:-1:-1;14644:34:4;-1:-1:-1;760:3370:31;;;-1:-1:-1;14644:34:4;760:3370:31;;;;;-1:-1:-1;;760:3370:31;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;3147:66:2;760:3370:31;;;;;;;;;;4301:16:2;760:3370:31;;;;;;;4724:16:2;;:34;;;;760:3370:31;4803:1:2;4788:16;:50;;;;760:3370:31;4853:13:2;:30;;;;760:3370:31;4849:91:2;;;5053:1;4949:18;;;760:3370:31;;3147:66:2;760:3370:31;;;3147:66:2;760:3370:31;;4949:18:2;4977:67;;5053:1;:::i;:::-;5064:101;;760:3370:31;5064:101:2;5098:23;760:3370:31;3147:66:2;760:3370:31;;3147:66:2;760:3370:31;;5098:23:2;760:3370:31;;4803:1:2;760:3370:31;;5140:14:2;;760:3370:31;;5140:14:2;760:3370:31;4977:67:2;5011:22;760:3370:31;;3147:66:2;760:3370:31;;;3147:66:2;760:3370:31;;5011:22:2;5053:1;:::i;4849:91::-;4906:23;-1:-1:-1;4906:23:2;760:3370:31;-1:-1:-1;4906:23:2;4853:30;4870:13;;;4853:30;;;4788:50;4816:4;4808:25;:30;;-1:-1:-1;4788:50:2;;4724:34;;;-1:-1:-1;4724:34:2;;760:3370:31;;;;;-1:-1:-1;;760:3370:31;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;760:3370:31;-1:-1:-1;;760:3370:31;;;;;;;;;3006:10;13345:18:4;13341:88;;13488:29;;15093:648;;;;;;;;;;;;;;;;;;;;;;;;;;14925:822;13488:29;760:3370:31;;;;;;;;;;:::i;:::-;;1649:38;760:3370;;;3006:10;2791:6:5;3006:10:31;;-1:-1:-1;3006:10:31;2791:6:5;:::i;:::-;-1:-1:-1;3475:13:5;-1:-1:-1;3470:499:5;1649:38:31;;;3470:499:5;4134:35;760:3370:31;4134:17:5;760:3370:31;;3338:17:5;760:3370:31;;3506:3:5;760:3370:31;;3490:14:5;;;;;17992:82:20;;;;;;;;;;3730:41:5;17992:82:20;;;;;;;;;;;;760:3370:31;;1571:71:5;760:3370:31;;;;;;;3730:41:5;760:3370:31;;;;;;;3506:3:5;760:3370:31;3475:13:5;;;;;3490:14;;;13341:88:4;760:3370:31;13386:32:4;;;;760:3370:31;;;13386:32:4;760:3370:31;;;;;;;;-1:-1:-1;;760:3370:31;;;;;;;-1:-1:-1;760:3370:31;1571:71:5;760:3370:31;;;;-1:-1:-1;760:3370:31;;;;;;;;;;;;;-1:-1:-1;;760:3370:31;;;;;;;;1077:24;760:3370;;;;;;;;-1:-1:-1;;760:3370:31;;;;;5815:26:0;760:3370:31;;;;:::i;:::-;5785:18:0;3283:4;5785:18;;-1:-1:-1;760:3370:31;2968:71:0;760:3370:31;;4967:24:0;760:3370:31;-1:-1:-1;760:3370:31;4967:24:0;760:3370:31;4807:191:0;;3283:4;5815:26;:::i;760:3370:31:-;;;;;-1:-1:-1;;760:3370:31;;;;;;;4582:39:4;760:3370:31;;:::i;:::-;4582:29:4;760:3370:31;;:::i;:::-;;-1:-1:-1;;;;;760:3370:31;;;14698:20:4;760:3370:31;;;;;;;;;;;;-1:-1:-1;;760:3370:31;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;-1:-1:-1;;;;;760:3370:31;;966:10:6;4829:14:4;;;:49;;;760:3370:31;4825:129:4;;-1:-1:-1;;;;;760:3370:31;;9381:16:4;9377:88;;9478:18;9474:88;;9710:4;9621:29;;15093:648;;;;;;;;;;;;;;;;;;;;;;;;;;14925:822;9621:29;9710:4;;;;:::i;4825:129::-;4901:42;-1:-1:-1;4901:42:4;966:10:6;760:3370:31;;;;;-1:-1:-1;4901:42:4;4829:49;966:10:6;4848:30:4;966:10:6;4848:30:4;;:::i;:::-;4847:31;4829:49;;760:3370:31;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;5049:429:4:-;;;;;-1:-1:-1;;;;;760:3370:31;;966:10:6;5286:14:4;;;:49;;;5049:429;5282:129;;-1:-1:-1;;;;;760:3370:31;;10316:16:4;10312:88;;10413:18;10409:88;;10556:4;;;:::i;5286:49::-;5305:30;760:3370:31;4582:39:4;966:10:6;4582:29:4;;-1:-1:-1;;;;;760:3370:31;;;14698:20:4;760:3370:31;;;;;;;4582:39:4;760:3370:31;;5304:31:4;5286:49;;760:3370:31;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;-1:-1:-1;;760:3370:31;;;;:::i;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;3646:552:4;;;;760:3370:31;;;;3802:29:4;;;3798:121;;760:3370:31;;3962:30:4;760:3370:31;;3962:30:4;:::i;:::-;4008:13;-1:-1:-1;4044:3:4;760:3370:31;;4023:19:4;;;;;17194:82:20;3458:24:4;760:3370:31;17194:82:20;;;;;;;;;;17992;;;;;-1:-1:-1;760:3370:31;1999:65:4;17194:82:20;760:3370:31;;-1:-1:-1;760:3370:31;;-1:-1:-1;;;;;760:3370:31;;;;;;;;;;3458:24:4;760:3370:31;4063:87:4;;;;:::i;:::-;760:3370:31;;4008:13:4;;4023:19;-1:-1:-1;4023:19:4;;-1:-1:-1;;3646:552:4:o;3798:121::-;3854:54;-1:-1:-1;3854:54:4;;760:3370:31;;;;-1:-1:-1;3854:54:4;760:3370:31;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;760:3370:31;;;;;;;:::o;:::-;;:::i;:::-;;;;;;;;:::o;:::-;1388:12;-1:-1:-1;760:3370:31;;-1:-1:-1;760:3370:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;-1:-1:-1;760:3370:31;;1388:12;760:3370;;;;;;-1:-1:-1;760:3370:31;;;;;;;;;;;;:::o;:::-;11513:6:4;-1:-1:-1;760:3370:31;;-1:-1:-1;760:3370:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;-1:-1:-1;760:3370:31;;;;;;;;;-1:-1:-1;760:3370:31;;;;;;;;;;;;;:::o;:::-;-1:-1:-1;760:3370:31;;-1:-1:-1;760:3370:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;-1:-1:-1;760:3370:31;;;;;;;;;-1:-1:-1;760:3370:31;;;;;;;;;;;;;;;;1410:16;760:3370;;:::i;:::-;1410:16;760:3370;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;760:3370:31;;;;;;;;;;;;;1410:16;760:3370;:::o;:::-;;;;-1:-1:-1;760:3370:31;;;;;1410:16;760:3370;;-1:-1:-1;;760:3370:31;;;;;;;;;;;;;;;;;;;;;;;;;;;1410:16;760:3370;:::o;:::-;;;-1:-1:-1;;760:3370:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1159:274;;;2340:4:4;1159:274:31;6891:76:2;;:::i;:::-;;;:::i;2340:4:4:-;6891:76:2;;:::i;:::-;1336:42:31;1367:10;1336:42;:::i;:::-;;760:3370;;;;;;;;;;;1388:12;760:3370;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;;;2443:4:0;760:3370:31;;;;;-1:-1:-1;;760:3370:31;;;;;;;;;;;;;1388:12;760:3370;;:::i;:::-;1388:12;760:3370;;-1:-1:-1;;760:3370:31;;;;;;2443:4:0;760:3370:31;;;;;;;;1388:12;760:3370;;;;;;;;;;;;;;;;;1388:12;760:3370;;:::i;:::-;;;-1:-1:-1;;760:3370:31;;;;;;;;;;;;;;;;;;;1388:12;760:3370;;;;;;;;;;;;;;;4412:216:4;760:3370:31;4412:216:4;4582:29;:39;4412:216;-1:-1:-1;;;;;760:3370:31;;;14698:20:4;760:3370:31;;;;;;;4582:39:4;760:3370:31;;4412:216:4;:::o;11390:145::-;;760:3370:31;;;;;;;;;;11513:6:4;760:3370:31;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;760:3370:31;;;;;;;;;;;;;11513:6:4;760:3370:31;11390:145:4:o;760:3370:31:-;11513:6:4;760:3370:31;;-1:-1:-1;;760:3370:31;;;;;;;;;;;;;;;;;;;;;;;;;;;11513:6:4;760:3370:31;11390:145:4:o;760:3370:31:-;;;-1:-1:-1;;760:3370:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;-1:-1:-1;;760:3370:31;;;;:::i;4196:103:0:-;760:3370:31;-1:-1:-1;760:3370:31;2968:71:0;760:3370:31;;;3949:31:0;966:10:6;760:3370:31;-1:-1:-1;760:3370:31;;-1:-1:-1;;;;;760:3370:31;;;;;;;;;;3949:31:0;760:3370:31;;4516:23:0;4512:108;;4196:103;:::o;4512:108::-;4562:47;-1:-1:-1;4562:47:0;966:10:6;4562:47:0;760:3370:31;;;;-1:-1:-1;4562:47:0;7318:387;-1:-1:-1;;;;;760:3370:31;;2443:4:0;760:3370:31;;;;;;;;;;;;;;-1:-1:-1;;;;;760:3370:31;2443:4:0;760:3370:31;;;;;;;;;;;-1:-1:-1;;760:3370:31;7557:4:0;760:3370:31;;;966:10:6;;760:3370:31;7580:40:0;2443:4;;7580:40;7557:4;7634:11;:::o;7480:219::-;7676:12;2443:4;7676:12;:::o;7318:387::-;760:3370:31;;;2968:71:0;760:3370:31;;;3949:31:0;760:3370:31;;;;;-1:-1:-1;;;;;760:3370:31;;;;;;;;;;3949:31:0;760:3370:31;;;;;;;2968:71:0;760:3370:31;;7523:31:0;760:3370:31;;;;;-1:-1:-1;;;;;760:3370:31;;;;;;;;;;7523:31:0;7557:4;-1:-1:-1;;760:3370:31;;;;;;-1:-1:-1;;;;;966:10:6;760:3370:31;;7580:40:0;;760:3370:31;7580:40:0;;7557:4;7634:11;:::o;7480:219::-;7676:12;;760:3370:31;7676:12:0;:::o;7942:388::-;760:3370:31;;;2968:71:0;760:3370:31;;;3949:31:0;760:3370:31;;;;;-1:-1:-1;;;;;760:3370:31;;;;;;;;;;3949:31:0;760:3370:31;;;;;;;;2968:71:0;760:3370:31;;8147:31:0;760:3370:31;;;;;-1:-1:-1;;;;;760:3370:31;;;;;;;;;;8147:31:0;-1:-1:-1;;760:3370:31;;;;;-1:-1:-1;;;;;966:10:6;760:3370:31;;8205:40:0;;760:3370:31;8205:40:0;;760:3370:31;8259:11:0;:::o;760:3370:31:-;;;;;;;;;;;:::o;8102:700:4:-;;;;;2791:6:5;;;;-1:-1:-1;2791:6:5;:::i;:::-;-1:-1:-1;;;2923:3:5;760:3370:31;;2907:14:5;;;;;3182:23;1649:18:31;17992:82:20;;;;;3114:41:5;17992:82:20;;;;;;;;;;;;760:3370:31;;1571:71:5;760:3370:31;;;;;;;3114:41:5;:50;760:3370:31;;;3114:50:5;:::i;:::-;760:3370:31;;3182:23:5;:::i;:::-;2923:3;760:3370:31;2892:13:5;;;2907:14;3338:35;2907:14;;;;;;3338:35;2907:14;3338:17;760:3370:31;3338:35:5;:::i;:::-;:17;760:3370:31;;3338:35:5;-1:-1:-1;;;;;760:3370:31;;3398:16:5;3394:800;;;2887:333;8347:16:4;8343:453;;2887:333:5;8102:700:4;;;;:::o;8343:453::-;760:3370:31;;1649:18;8428:15:4;1649:18:31;;17992:82:20;;;8648:4:4;17992:82:20;;;;;;;966:10:6;-1:-1:-1;966:10:6;8648:4:4;:::i;:::-;8343:453;;;;;;8424:362;8766:4;966:10:6;-1:-1:-1;966:10:6;8766:4:4;:::i;:::-;8424:362;;3394:800:5;3430:26;-1:-1:-1;3430:26:5;;;-1:-1:-1;3470:499:5;3506:3;760:3370:31;;3490:14:5;;;;;1649:18:31;17992:82:20;;;;;3730:41:5;17992:82:20;;;;;;;;;;;;760:3370:31;;1571:71:5;760:3370:31;;;;;;;3730:41:5;760:3370:31;;;;;;;3506:3:5;760:3370:31;3475:13:5;;;3490:14;4134:35;3490:14;;;;;;;;3338:17;760:3370:31;;3338:17:5;760:3370:31;;4134:35:5;3394:800;;8102:700:4;;;;;;-1:-1:-1;;;;;760:3370:31;;1649:18;;;:38;;;;8102:700:4;760:3370:31;;;2791:6:5;;760:3370:31;2791:6:5;;;:::i;:::-;2809:575;;8102:700:4;760:3370:31;;3506:3:5;760:3370:31;;3490:14:5;;;;;3398:16;17992:82:20;;;;;3730:41:5;17992:82:20;;;;;;;;;;;;760:3370:31;;1571:71:5;760:3370:31;;;;;;;3730:41:5;760:3370:31;;;;;;;3506:3:5;760:3370:31;3475:13:5;;;3490:14;;;;4134:35;3490:14;;;4134:17;760:3370:31;;3338:17:5;760:3370:31;;2809:575:5;760:3370:31;;2923:3:5;760:3370:31;;2907:14:5;;;;;3182:23;760:3370:31;17992:82:20;;;;;3114:41:5;17992:82:20;;;;;;;;;;;;760:3370:31;;1571:71:5;760:3370:31;;;;;;;3182:23:5;2923:3;760:3370:31;2892:13:5;;;2907:14;3338:35;2907:14;;3338:35;2907:14;3338:17;760:3370:31;3338:35:5;:::i;:::-;2809:575;;760:3370:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;1649:38;;1671:16;1649:38;;8102:700:4;;;;;-1:-1:-1;;;;;760:3370:31;;1649:18;;:38;;;;8102:700:4;760:3370:31;;;2791:6:5;;;;;;:::i;:::-;2809:575;;8102:700:4;-1:-1:-1;;;;;760:3370:31;;3398:16:5;3394:800;;;8102:700:4;8347:16;8343:453;;8102:700;;;;;;:::o;8343:453::-;760:3370:31;;8442:1:4;8428:15;8442:1;;17992:82:20;;8648:4:4;17992:82:20;;;;;;966:10:6;;8648:4:4;:::i;:::-;8343:453;;;;;;;8424:362;8766:4;966:10:6;;;;8766:4:4;:::i;:::-;8424:362;;3394:800:5;3430:26;;1665:1:31;;3430:26:5;;1665:1:31;3506:3:5;760:3370:31;;3490:14:5;;;;;760:3370:31;17992:82:20;;;;;3730:41:5;17992:82:20;;;;;;;;;;;;760:3370:31;;1571:71:5;760:3370:31;;;;;;;3730:41:5;760:3370:31;;;;;;;3506:3:5;760:3370:31;3475:13:5;;;3490:14;4134:35;3490:14;;;;;;;4134:17;760:3370:31;;3338:17:5;760:3370:31;;4134:35:5;3394:800;;2809:575;2847:26;;1665:1:31;;;2923:3:5;760:3370:31;;2907:14:5;;;;;3182:23;760:3370:31;17992:82:20;;;;;3114:41:5;17992:82:20;;;;;;;;;;;;760:3370:31;;1571:71:5;760:3370:31;;;;;;;3182:23:5;2923:3;760:3370:31;2892:13:5;;;2907:14;3338:35;2907:14;;;3338:35;2907:14;;;;;3338:17;760:3370:31;3338:35:5;:::i;:::-;2809:575;;1649:38:31;760:3370;-1:-1:-1;;;;;760:3370:31;;1671:16;1649:38;;2264:344:13;;1748:29;;:34;1744:119;;-1:-1:-1;;;;;760:3370:31;;;;811:66:13;760:3370:31;;;811:66:13;760:3370:31;2407:36:13;1781:1;2407:36;;760:3370:31;;2458:15:13;:11;;2489:53;;;:::i;:::-;;2264:344::o;2454:148::-;6163:9;;;6159:70;;2264:344::o;6159:70::-;6199:19;1781:1;6199:19;;1781:1;6199:19;1744:119;-1:-1:-1;;;;;1805:47:13;;1781:1;1805:47;760:3370:31;1805:47:13;760:3370:31;;1781:1:13;1805:47;7082:141:2;760:3370:31;3147:66:2;760:3370:31;;;;7148:18:2;7144:73;;7082:141::o;7144:73::-;7189:17;-1:-1:-1;7189:17:2;;-1:-1:-1;7189:17:2;760:3370:31;;;;;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;760:3370:31;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;-1:-1:-1;760:3370:31;;;;:::o;:::-;;;:::o;2523:1028:18:-;;;;;;2747:14;;2743:802;;2523:1028;;;;;;;:::o;2743:802::-;2785:78;760:3370:31;2785:78:18;760:3370:31;;;2785:78:18;;;;;760:3370:31;2785:78:18;;;;;;:::i;:::-;;760:3370:31;2764:1:18;-1:-1:-1;;;;;760:3370:31;;2785:78:18;;2764:1;;2785:78;;;2743:802;-1:-1:-1;2781:754:18;;3147:388;;;:::i;:::-;760:3370:31;;;;3197:18:18;;;3302:41;2764:1;3302:41;-1:-1:-1;;;;;760:3370:31;;;;;-1:-1:-1;6493:60:3;3193:328:18;2785:78;3390:113;;;;2781:754;760:3370:31;;;;2942:60:18;2938:194;;2781:754;2743:802;;;;;;;;2938:194;3072:41;2764:1;3072:41;-1:-1:-1;;;;;760:3370:31;;;;-1:-1:-1;6493:60:3;2785:78:18;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;760:3370:31;;;-1:-1:-1;;;;;760:3370:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;1006:961:18:-;;;;;;1205:14;;1201:760;;1006:961;;;;;;:::o;1201:760::-;1243:71;760:3370:31;1243:71:18;760:3370:31;;;1243:71:18;;;;;760:3370:31;1243:71:18;;;;;;:::i;:::-;;760:3370:31;1222:1:18;-1:-1:-1;;;;;760:3370:31;;1243:71:18;;1222:1;;1243:71;;;1201:760;-1:-1:-1;1239:712:18;;1563:388;;;:::i;1239:712::-;760:3370:31;;;;1363:55:18;1359:189;;1239:712;1201:760;;;;;;;;1243:71;;;;;;;;;;;;;;;:::i;:::-;;;;;3916:253:19;4065:25;3916:253;4107:55;3916:253;4065:25;;;;;;;;;;:::i;:::-;4107:55;;:::i;760:3370:31:-;;;;;;;;;;:::o;4437:582:19:-;;4609:8;;-1:-1:-1;760:3370:31;;5690:21:19;:17;;5815:105;;;;;;5686:301;5957:19;5710:1;5957:19;;5710:1;5957:19;4605:408;760:3370:31;;4857:22:19;:49;;;4605:408;4853:119;;4985:17;;:::o;4853:119::-;-1:-1:-1;;;;;4933:24:19;;4878:1;4933:24;760:3370:31;4933:24:19;760:3370:31;;4878:1:19;4933:24;4857:49;4883:18;;;:23;4857:49;;760:3370:31;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;6179:1344:4:-;;;;760:3370:31;;;;6357:27:4;;;;6353:117;;6527:13;;-1:-1:-1;6558:3:4;760:3370:31;;6542:14:4;;;;;17992:82:20;;;;;;;;;;;;;;;;760:3370:31;-1:-1:-1;;;;;760:3370:31;;6688:424:4;;6558:3;760:3370:31;;-1:-1:-1;;;;;760:3370:31;;7126:83:4;;6558:3;;;;760:3370:31;6527:13:4;;7126:83;7166:28;:15;;:19;:15;760:3370:31;;1999:65:4;760:3370:31;;;;;;;7166:19:4;760:3370:31;;;7166:28:4;:::i;:::-;760:3370:31;;7126:83:4;;;;;6688:424;6752:15;;;:21;:15;;;760:3370:31;;1999:65:4;760:3370:31;;;;;;;6752:21:4;760:3370:31;6795:19:4;;;6791:129;;760:3370:31;;;;;;;;7036:21:4;:15;;;760:3370:31;;1999:65:4;760:3370:31;;;;;;;7036:21:4;760:3370:31;6688:424:4;;;;6791:129;760:3370:31;;6845:56:4;;;-1:-1:-1;;;;;760:3370:31;;6845:56:4;;;760:3370:31;;;;;;;;;;;;;;;;;;;;;;6845:56:4;6542:14;-1:-1:-1;760:3370:31;;6542:14:4;;;;;;760:3370:31;7233:15:4;760:3370:31;;17992:82:20;;;;;;;;;760:3370:31;;;;;;;;;;-1:-1:-1;;;;;760:3370:31;;;;;;;;966:10:6;;7379:45:4;;760:3370:31;;;;7379:45:4;;;;6179:1344::o;7229:288::-;760:3370:31;;-1:-1:-1;;;;;7460:46:4;760:3370:31;7460:46:4;760:3370:31;;;;;;;;;966:10:6;;7460:46:4;;;:::i"
            },
            "methodIdentifiers": {
              "DEFAULT_ADMIN_ROLE()": "a217fddf",
              "MINTER_ROLE()": "d5391393",
              "UPGRADE_INTERFACE_VERSION()": "ad3cb1cc",
              "balanceOf(address,uint256)": "00fdd58e",
              "balanceOfBatch(address[],uint256[])": "4e1273f4",
              "burn(uint256,uint256)": "b390c0ab",
              "burnBatch(uint256[],uint256[])": "83ca4b6f",
              "exists(uint256)": "4f558e79",
              "getCurrentTokenId()": "56189236",
              "getRoleAdmin(bytes32)": "248a9ca3",
              "grantRole(bytes32,address)": "2f2ff15d",
              "hasRole(bytes32,address)": "91d14854",
              "initialize(string,string,string)": "a6487c53",
              "isApprovedForAll(address,address)": "e985e9c5",
              "mint(uint256,address)": "94bf804d",
              "mintBatch(uint256[],address)": "6ac4d939",
              "name()": "06fdde03",
              "pause()": "8456cb59",
              "paused()": "5c975abb",
              "proxiableUUID()": "52d1902d",
              "renounceRole(bytes32,address)": "36568abe",
              "revokeRole(bytes32,address)": "d547741f",
              "safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)": "2eb2c2d6",
              "safeTransferFrom(address,address,uint256,uint256,bytes)": "f242432a",
              "setApprovalForAll(address,bool)": "a22cb465",
              "setURI(string)": "02fe5305",
              "supportsInterface(bytes4)": "01ffc9a7",
              "symbol()": "95d89b41",
              "totalSupply()": "18160ddd",
              "totalSupply(uint256)": "bd85b039",
              "unpause()": "3f4ba83a",
              "upgradeToAndCall(address,bytes)": "4f1ef286",
              "uri(uint256)": "0e89341c"
            }
          },
          "metadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"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\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC1155InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC1155InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"idsLength\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"valuesLength\",\"type\":\"uint256\"}],\"name\":\"ERC1155InvalidArrayLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"ERC1155InvalidOperator\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC1155InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC1155InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC1155MissingApprovalForAll\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC1967NonPayable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EnforcedPause\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExpectedPause\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"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\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"}],\"name\":\"TransferBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"TransferSingle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"value\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"URI\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MINTER_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UPGRADE_INTERFACE_VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"accounts\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"}],\"name\":\"balanceOfBatch\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amounts\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"tokenIds\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"name\":\"burnBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"exists\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCurrentTokenId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name_\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol_\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"uri_\",\"type\":\"string\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amounts\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"mintBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"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\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeBatchTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"newuri\",\"type\":\"string\"}],\"name\":\"setURI\",\"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\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"uri\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AccessControlBadConfirmation()\":[{\"details\":\"The caller of a function is not the expected one. NOTE: Don't confuse with {AccessControlUnauthorizedAccount}.\"}],\"AccessControlUnauthorizedAccount(address,bytes32)\":[{\"details\":\"The `account` is missing a role.\"}],\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"ERC1155InsufficientBalance(address,uint256,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC1155InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC1155InvalidArrayLength(uint256,uint256)\":[{\"details\":\"Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation. Used in batch transfers.\",\"params\":{\"idsLength\":\"Length of the array of token identifiers\",\"valuesLength\":\"Length of the array of token amounts\"}}],\"ERC1155InvalidOperator(address)\":[{\"details\":\"Indicates a failure with the `operator` to be approved. Used in approvals.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC1155InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC1155InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC1155MissingApprovalForAll(address,address)\":[{\"details\":\"Indicates a failure with the `operator`\\u2019s approval. Used in transfers.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\",\"owner\":\"Address of the current owner of a token.\"}}],\"ERC1967InvalidImplementation(address)\":[{\"details\":\"The `implementation` of the proxy is invalid.\"}],\"ERC1967NonPayable()\":[{\"details\":\"An upgrade function sees `msg.value > 0` that may be lost.\"}],\"EnforcedPause()\":[{\"details\":\"The operation failed because the contract is paused.\"}],\"ExpectedPause()\":[{\"details\":\"The operation failed because the contract is not paused.\"}],\"FailedCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"ApprovalForAll(address,address,bool)\":{\"details\":\"Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to `approved`.\"},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"Paused(address)\":{\"details\":\"Emitted when the pause is triggered by `account`.\"},\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted to signal this.\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call. This account bears the admin role (for the granted role). Expected in cases where the role was granted using the internal {AccessControl-_grantRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"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`)\"},\"TransferBatch(address,address,address,uint256[],uint256[])\":{\"details\":\"Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all transfers.\"},\"TransferSingle(address,address,address,uint256,uint256)\":{\"details\":\"Emitted when `value` amount of tokens of type `id` are transferred from `from` to `to` by `operator`.\"},\"URI(string,uint256)\":{\"details\":\"Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. If an {URI} event was emitted for `id`, the standard https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value returned by {IERC1155MetadataURI-uri}.\"},\"Unpaused(address)\":{\"details\":\"Emitted when the pause is lifted by `account`.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{\"balanceOf(address,uint256)\":{\"details\":\"Returns the value of tokens of token type `id` owned by `account`.\"},\"balanceOfBatch(address[],uint256[])\":{\"details\":\"See {IERC1155-balanceOfBatch}. Requirements: - `accounts` and `ids` must have the same length.\"},\"exists(uint256)\":{\"details\":\"Indicates whether any token exist with a given id, or not.\"},\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"grantRole(bytes32,address)\":{\"details\":\"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.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"isApprovedForAll(address,address)\":{\"details\":\"Returns true if `operator` is approved to transfer ``account``'s tokens. See {setApprovalForAll}.\"},\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC-1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\"},\"renounceRole(bytes32,address)\":{\"details\":\"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.\"},\"revokeRole(bytes32,address)\":{\"details\":\"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.\"},\"safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)\":{\"details\":\"xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. WARNING: This function can potentially allow a reentrancy attack when transferring tokens to an untrusted contract, when invoking {IERC1155Receiver-onERC1155BatchReceived} on the receiver. Ensure to follow the checks-effects-interactions pattern and consider employing reentrancy guards when interacting with untrusted contracts. Emits either a {TransferSingle} or a {TransferBatch} event, depending on the length of the array arguments. Requirements: - `ids` and `values` must have the same length. - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the acceptance magic value.\"},\"safeTransferFrom(address,address,uint256,uint256,bytes)\":{\"details\":\"Transfers a `value` amount of tokens of type `id` from `from` to `to`. WARNING: This function can potentially allow a reentrancy attack when transferring tokens to an untrusted contract, when invoking {IERC1155Receiver-onERC1155Received} on the receiver. Ensure to follow the checks-effects-interactions pattern and consider employing reentrancy guards when interacting with untrusted contracts. Emits a {TransferSingle} event. Requirements: - `to` cannot be the zero address. - If the caller is not `from`, it must have been approved to spend ``from``'s tokens via {setApprovalForAll}. - `from` must have a balance of tokens of type `id` of at least `value` amount. - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the acceptance magic value.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, Emits an {ApprovalForAll} event. Requirements: - `operator` cannot be the zero address.\"},\"totalSupply()\":{\"details\":\"Total value of tokens.\"},\"totalSupply(uint256)\":{\"details\":\"Total value of tokens in with a given id.\"},\"upgradeToAndCall(address,bytes)\":{\"custom:oz-upgrades-unsafe-allow-reachable\":\"delegatecall\",\"details\":\"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/SoulboundToken.sol\":\"Soulbound\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol\":{\"keccak256\":\"0x85a70e2b1b65e9ba456add364d22b97eb9944083df1c39c0b4bd6a4b5aa386a4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d32a33be6ca4d8e89b9e82e3f9cec7a6c4e040534152313ff55da85b8f193059\",\"dweb:/ipfs/QmeR55L8t2A8xZ1nvT5y4yVWfFbbmpaGAtGBMz3GGNpuyP\"]},\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6\",\"dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2\"]},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0xdb4d24ee2c087c391d587cd17adfe5b3f9d93b3110b1388c2ab6c7c0ad1dcd05\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ab7b6d5b9e2b88176312967fe0f0e78f3d9a1422fa5e4b64e2440c35869b5d08\",\"dweb:/ipfs/QmXKYWWyzcLg1B2k7Sb1qkEXgLCYfXecR9wYW5obRzWP1Q\"]},\"@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol\":{\"keccak256\":\"0x574a7451e42724f7de29e2855c392a8a5020acd695169466a18459467d719d63\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5bc189f63b639ee173dd7b6fecc39baf7113bf161776aea22b34c57fdd1872ec\",\"dweb:/ipfs/QmZAf2VtjDLRULqjJkde6LNsxAg12tUqpPqgUQQZbAjgtZ\"]},\"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155Upgradeable.sol\":{\"keccak256\":\"0x366f804cd7571a67c51bec726d9f25b44cb0fb52bdeeed88b397c24c7ea0865f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a8fccf68ef3ff40ed155e23ed8e3d0de299dcef6012a0536828b16c65af2b3c8\",\"dweb:/ipfs/Qmahy3CJAgMoNJEpbJMjEKsZMc6sU8gCYrFan4WnmBrMZT\"]},\"@openzeppelin/contracts-upgradeable/token/ERC1155/extensions/ERC1155SupplyUpgradeable.sol\":{\"keccak256\":\"0xb9823676cbde3953a1578db316962b3c14d1518c246293d92acf9bb276ce5da4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://63565d7926edaed0e116338a9240edd2d391cf808d009f937762bd930d8a6c86\",\"dweb:/ipfs/QmUyfwAxYDnzSqNhCnqUqjFuM42wFNbHM4VRgjuFkc8yNW\"]},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9\",\"dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV\"]},\"@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol\":{\"keccak256\":\"0xa6bf6b7efe0e6625a9dcd30c5ddf52c4c24fe8372f37c7de9dbf5034746768d5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8c353ee3705bbf6fadb84c0fb10ef1b736e8ca3ca1867814349d1487ed207beb\",\"dweb:/ipfs/QmcugaPssrzGGE8q4YZKm2ZhnD3kCijjcgdWWg76nWt3FY\"]},\"@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol\":{\"keccak256\":\"0x6694b63ddb2c59bbe341c846171798350e8f72fa02189fcdeaca864e28b54e1f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d945d33e2189ac4e531e4ed228f59ca957b3898c4f9051f4b8c7ae44d72b23a\",\"dweb:/ipfs/QmRcEwubTe3xyXxthijs5fVzEgUFSxeddjd5PGfhBnkunX\"]},\"@openzeppelin/contracts/access/IAccessControl.sol\":{\"keccak256\":\"0xbff9f59c84e5337689161ce7641c0ef8e872d6a7536fbc1f5133f128887aba3c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b308f882e796f7b79c9502deacb0a62983035c6f6f4e962b319ba6a1f4a77d3d\",\"dweb:/ipfs/QmaWCW7ahEQqFjwhSUhV7Ae7WhfNvzSpE7DQ58hvEooqPL\"]},\"@openzeppelin/contracts/interfaces/IERC1967.sol\":{\"keccak256\":\"0xbf2aefe54b76d7f7bcd4f6da1080b7b1662611937d870b880db584d09cea56b5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5e7e2f12e0feec75296e57f51f82fdaa8bd1551f4b8cc6560442c0bf60f818c\",\"dweb:/ipfs/QmcW9wDMaQ8RbQibMarfp17a3bABzY5KraWe2YDwuUrUoz\"]},\"@openzeppelin/contracts/interfaces/draft-IERC1822.sol\":{\"keccak256\":\"0x82f757819bf2429a0d4db141b99a4bbe5039e4ef86dfb94e2e6d40577ed5b28b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://37c30ed931e19fb71fdb806bb504cfdb9913b7127545001b64d4487783374422\",\"dweb:/ipfs/QmUBHpv4hm3ZmwJ4GH8BeVzK4mv41Q6vBbWXxn8HExPXza\"]},\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x19fdfb0f3b89a230e7dbd1cf416f1a6b531a3ee5db4da483f946320fc74afc0e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3490d794728f5bfecb46820431adaff71ba374141545ec20b650bb60353fac23\",\"dweb:/ipfs/QmPsfxjVpMcZbpE7BH93DzTpEaktESigEw4SmDzkXuJ4WR\"]},\"@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0xa1ad192cd45317c788618bef5cb1fb3ca4ce8b230f6433ac68cc1d850fb81618\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b43447bb85a53679d269a403c693b9d88d6c74177dfb35eddca63abaf7cf110a\",\"dweb:/ipfs/QmXSDmpd4bNZj1PDgegr6C4w1jDaWHXCconC3rYiw9TSkQ\"]},\"@openzeppelin/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0x20462ddb2665e9521372c76b001d0ce196e59dbbd989de9af5576cad0bd5628b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f417fd12aeec8fbfaceaa30e3a08a0724c0bc39de363e2acf6773c897abbaf6d\",\"dweb:/ipfs/QmU4Hko6sApdweVM92CsiuLKkCk8HfyBeutF89PCTz5Tye\"]},\"@openzeppelin/contracts/token/ERC1155/IERC1155.sol\":{\"keccak256\":\"0xf189f9b417fe1931e1ab706838aff1128528694a9fcdb5ff7665197f2ca57d09\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2ff0143c836c8c9f85d13708733c09e21251395847fccfb518bf3b556726a840\",\"dweb:/ipfs/QmP69sjjrQrhYAsvCSSB69Bx66SiUPdQUqdzMYnf4wANHm\"]},\"@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol\":{\"keccak256\":\"0x6ec6d7fce29668ede560c7d2e10f9d10de3473f5298e431e70a5767db42fa620\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ac0139e51874aeec0730d040e57993187541777eb01d5939c06d5d2b986a54e8\",\"dweb:/ipfs/QmZbMbdPzusXuX9FGkyArV8hgzKLBZaL5RzMtCdCawtwPF\"]},\"@openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol\":{\"keccak256\":\"0x98c32de9b02f43eba7c0aba9fadf331cffb35a8d2076dce1d556c8f2cad704aa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38f68f76e741cce3ca4e0f8ece5ab9d69a203829311a403bafc8f7b95a7e6d63\",\"dweb:/ipfs/QmZ8PrDXU5DiZ7fzEoRN7vHMQdemtsqvYVV5AdvAnScS4o\"]},\"@openzeppelin/contracts/token/ERC1155/utils/ERC1155Utils.sol\":{\"keccak256\":\"0xaeca1511f7da49bdb16e44aa0f09dca76b51ba079bd068b2f80b8fe6d22b5fa1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://542fe084e72e14f4298954f70c407d5795c1207a02c049f9b91e15f3b9a525a5\",\"dweb:/ipfs/QmbPQMVUVZBE9R9Va6FNfZBTrUY51nrjm8qxpeoAoRrPrQ\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x6d0ae6e206645341fd122d278c2cb643dea260c190531f2f3f6a0426e77b00c0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://032d1201d839435be2c85b72e33206b3ea980c569d6ebf7fa57d811ab580a82f\",\"dweb:/ipfs/QmeqQjAtMvdZT2tG7zm39itcRJkuwu8AEReK6WRnLJ18DD\"]},\"@openzeppelin/contracts/utils/Arrays.sol\":{\"keccak256\":\"0xa4b9958797e0e9cde82a090525e90f80d5745ba1c67ee72b488bd3087498a17e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c9344f7c2f80322c2e76d9d89bed03fd12f3e011e74fde7cf24ea21bdd2abe2d\",\"dweb:/ipfs/QmPMAjF5x2fHUAee2FKMZDBbFVrbZbPCr3a9KHLZaSn1zY\"]},\"@openzeppelin/contracts/utils/Comparators.sol\":{\"keccak256\":\"0x302eecd8cf323b4690e3494a7d960b3cbce077032ab8ef655b323cdd136cec58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://49ba706f1bc476d68fe6c1fad75517acea4e9e275be0989b548e292eb3a3eacd\",\"dweb:/ipfs/QmeBpvcdGWzWMKTQESUCEhHgnEQYYATVwPxLMxa6vMT7jC\"]},\"@openzeppelin/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]},\"@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"@openzeppelin/contracts/utils/SlotDerivation.sol\":{\"keccak256\":\"0x67672e4ca1dafdcc661d4eba8475cfac631fa0933309258e3af7644b92e1fb26\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30192451f05ea5ddb0c18bd0f9003f098505836ba19c08a9c365adf829454da2\",\"dweb:/ipfs/QmfCuZSCTyCdFoSKn7MSaN6hZksnQn9ZhrZDAdRTCbwGu2\"]},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0xad148d59f05165f9217d0a9e1ac8f772abb02ea6aaad8a756315c532bf79f9f4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://15e3599867c2182f5831e9268b274b2ef2047825837df6b4d81c9e89254b093e\",\"dweb:/ipfs/QmZbL7XAYr5RmaNaooPgZRmcDXaudfsYQfYD9y5iAECvpS\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x8891738ffe910f0cf2da09566928589bf5d63f4524dd734fd9cedbac3274dd5c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://971f954442df5c2ef5b5ebf1eb245d7105d9fbacc7386ee5c796df1d45b21617\",\"dweb:/ipfs/QmadRjHbkicwqwwh61raUEapaVEtaLMcYbQZWs9gUkgj3u\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x1225214420c83ebcca88f2ae2b50f053aaa7df7bd684c3e878d334627f2edfc6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c5fab4970634f9ab9a620983dc1c8a30153981a0b1a521666e269d0a11399d3\",\"dweb:/ipfs/QmVRnBC575MESGkEHndjujtR7qub2FzU9RWy9eKLp4hPZB\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03\",\"dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ\"]},\"contracts/SoulboundToken.sol\":{\"keccak256\":\"0x8fa82ced2f96512da69649dd8ea1ce3f7fec9f4a1b599f7c4915ae66c60211cf\",\"license\":\"FSL-1.1-MIT\",\"urls\":[\"bzz-raw://1cc224672a67dfe5dbd783e1398fa15c97aa3ee846fb1c6e92482c6d5a4be75c\",\"dweb:/ipfs/QmZHpVQGDL61SBhBLbJfmDKyZ1K4xCNrdKkzwXeYQwVE9H\"]}},\"version\":1}"
        }
      }
    }
  }
}